PaddleOCR学习笔记1-初步尝试

news2024/11/13 9:29:41

尝试使用PaddleOCR方法,如何使用自定义的模型方法,参数怎么配置,图片识别尝试简单提高识别率方法。

目前仅仅只是初步学习下如何使用PaddleOCR的方法。

一,测试识别图片:

1.png :

正确文本内容为“哲学可以帮助辩别现代科技创新发展的方向

二,测试代码:

paddleocr_test2.py :
结合使用了之前学习的PIL和NumPy库,自定义模型实际还是使用的官网提供的最新版本模型,我还没学习如何自己训练模型,只是为了学习如何使用参数变量。
from paddleocr import PaddleOCR
from PIL import Image,ImageDraw
import numpy as np

'''
自定义模型测试ocr方法
'''
def test_model_ocr(img):
    # paddleocr 目前支持的多语言语种可以通过修改lang参数进行切换
    # 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
    # 使用CPU预加载,不用GPU
    # 模型路径下必须包含model和params文件,目前开源的v3版本模型 已经是识别率很高的了
    # 还要更好的就要自己训练模型了。
    ocr = PaddleOCR(det_model_dir='./inference/ch_PP-OCRv3_det_infer/',
                    rec_model_dir='./inference/ch_PP-OCRv3_rec_infer/',
                    cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_infer/',
                    use_angle_cls=True, lang="ch", use_gpu=False)
    # 识别图片文件
    result = ocr.ocr(img, cls=True)
    return result

# 打印所有结果信息
def print_ocr_result(result):
    # print(result)
    for index in range(len(result)):
        rst = result[index]
        for line in rst:
            points = line[0]
            text = line[1][0]
            score = line[1][1]
            print('points : ', points)
            print('text : ', text)
            print('score : ', score)
        print('==========================================')

# 转换图片
def convert_image(image, threshold=None):
    # 阈值 控制二值化程度,不能超过256,[200, 256]
    # 适当调大阈值,可以提高文本识别率,经过测试有效。
    if threshold is None:
        threshold = 200
    print('threshold : ', threshold)
    # 首先进行图片灰度处理
    image = image.convert("L")
    pixels = image.load()
    # 在进行二值化
    for x in range(image.width):
        for y in range(image.height):
            if pixels[x, y] > threshold:
                pixels[x, y] = 255
            else:
                pixels[x, y] = 0
    return image

if __name__ == "__main__":
    img_path = "1.png"
    # 1,直接识别图片文本
    print('1,直接识别图片文本')
    result1 = test_model_ocr(img_path)
    # 打印所有结果信息
    print_ocr_result(result1)

    # 2,转换为ndarray数组 识别图片文本
    print('2,转换为ndarray数组 识别图片文本')
    # 打开图片
    img1 = Image.open(img_path)
    # Image图像转换为ndarray数组
    img_1 = np.array(img1)
    # print(img_1)
    result2 = test_model_ocr(img_1)
    # 打印所有结果信息
    print_ocr_result(result2)

    # 3,转换图片, 识别图片文本
    print('3,转换图片,阈值=200时,再转换为ndarray数组, 识别图片文本')
    # 转换图片
    img2 = convert_image(img1, 200)
    # img2.show()
    # img2.save("11.png")
    # Image图像转换为ndarray数组
    img_2 = np.array(img2)
    # print(img_2)
    # 识别图片
    result3 = test_model_ocr(img_2)
    # 打印所有结果信息
    print_ocr_result(result3)

    # 4,转换图片, 识别图片文本
    print('4,转换图片,阈值=220时,再转换为ndarray数组, 识别图片文本')
    # 转换图片
    img3 = convert_image(img1, 220)
    # Image图像转换为ndarray数组
    img_3 = np.array(img3)
    # 识别图片
    result4 = test_model_ocr(img_3)
    # 打印所有结果信息
    print_ocr_result(result4)

三,测试结果:

1,直接识别图片文本
[2023/06/25 10:38:41] ppocr DEBUG: Namespace(alpha=1.0, benchmark=False, beta=1.0, cls_batch_num=6, cls_image_shape='3, 48, 192', cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_infer/', cls_thresh=0.9, cpu_threads=10, crop_res_save_dir='./output', det=True, det_algorithm='DB', det_box_type='quad', det_db_box_thresh=0.6, det_db_score_mode='fast', det_db_thresh=0.3, det_db_unclip_ratio=1.5, det_east_cover_thresh=0.1, det_east_nms_thresh=0.2, det_east_score_thresh=0.8, det_limit_side_len=960, det_limit_type='max', det_model_dir='./inference/ch_PP-OCRv3_det_infer/', det_pse_box_thresh=0.85, det_pse_min_area=16, det_pse_scale=1, det_pse_thresh=0, det_sast_nms_thresh=0.2, det_sast_score_thresh=0.5, draw_img_save_dir='./inference_results', drop_score=0.5, e2e_algorithm='PGNet', e2e_char_dict_path='./ppocr/utils/ic15_dict.txt', e2e_limit_side_len=768, e2e_limit_type='max', e2e_model_dir=None, e2e_pgnet_mode='fast', e2e_pgnet_score_thresh=0.5, e2e_pgnet_valid_set='totaltext', enable_mkldnn=False, fourier_degree=5, gpu_mem=500, help='==SUPPRESS==', image_dir=None, image_orientation=False, ir_optim=True, kie_algorithm='LayoutXLM', label_list=['0', '180'], lang='ch', layout=True, layout_dict_path=None, layout_model_dir=None, layout_nms_threshold=0.5, layout_score_threshold=0.5, max_batch_size=10, max_text_length=25, merge_no_span_structure=True, min_subgraph_size=15, mode='structure', ocr=True, ocr_order_method=None, ocr_version='PP-OCRv3', output='./output', page_num=0, precision='fp32', process_id=0, re_model_dir=None, rec=True, rec_algorithm='SVTR_LCNet', rec_batch_num=6, rec_char_dict_path='C:\\Users\\86159\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\paddleocr\\ppocr\\utils\\ppocr_keys_v1.txt', rec_image_inverse=True, rec_image_shape='3, 48, 320', rec_model_dir='./inference/ch_PP-OCRv3_rec_infer/', recovery=False, save_crop_res=False, save_log_path='./log_output/', scales=[8, 16, 32], ser_dict_path='../train_data/XFUND/class_list_xfun.txt', ser_model_dir=None, show_log=True, sr_batch_num=1, sr_image_shape='3, 32, 128', sr_model_dir=None, structure_version='PP-StructureV2', table=True, table_algorithm='TableAttn', table_char_dict_path=None, table_max_len=488, table_model_dir=None, total_process_num=1, type='ocr', use_angle_cls=True, use_dilation=False, use_gpu=False, use_mp=False, use_npu=False, use_onnx=False, use_pdf2docx_api=False, use_pdserving=False, use_space_char=True, use_tensorrt=False, use_visual_backbone=True, use_xpu=False, vis_font_path='./doc/fonts/simfang.ttf', warmup=False)
[2023/06/25 10:38:41] ppocr DEBUG: dt_boxes num : 1, elapse : 0.022063255310058594
[2023/06/25 10:38:41] ppocr DEBUG: cls num  : 1, elapse : 0.007994413375854492
[2023/06/25 10:38:42] ppocr DEBUG: rec_res num  : 1, elapse : 0.22030949592590332
points :  [[17.0, 14.0], [514.0, 14.0], [514.0, 33.0], [17.0, 33.0]]
text :  哲学可以帮助辨别现代科技创新发展的方声
score :  0.8344171047210693
==========================================
2,转换为ndarray数组 识别图片文本
[2023/06/25 10:38:42] ppocr DEBUG: Namespace(alpha=1.0, benchmark=False, beta=1.0, cls_batch_num=6, cls_image_shape='3, 48, 192', cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_infer/', cls_thresh=0.9, cpu_threads=10, crop_res_save_dir='./output', det=True, det_algorithm='DB', det_box_type='quad', det_db_box_thresh=0.6, det_db_score_mode='fast', det_db_thresh=0.3, det_db_unclip_ratio=1.5, det_east_cover_thresh=0.1, det_east_nms_thresh=0.2, det_east_score_thresh=0.8, det_limit_side_len=960, det_limit_type='max', det_model_dir='./inference/ch_PP-OCRv3_det_infer/', det_pse_box_thresh=0.85, det_pse_min_area=16, det_pse_scale=1, det_pse_thresh=0, det_sast_nms_thresh=0.2, det_sast_score_thresh=0.5, draw_img_save_dir='./inference_results', drop_score=0.5, e2e_algorithm='PGNet', e2e_char_dict_path='./ppocr/utils/ic15_dict.txt', e2e_limit_side_len=768, e2e_limit_type='max', e2e_model_dir=None, e2e_pgnet_mode='fast', e2e_pgnet_score_thresh=0.5, e2e_pgnet_valid_set='totaltext', enable_mkldnn=False, fourier_degree=5, gpu_mem=500, help='==SUPPRESS==', image_dir=None, image_orientation=False, ir_optim=True, kie_algorithm='LayoutXLM', label_list=['0', '180'], lang='ch', layout=True, layout_dict_path=None, layout_model_dir=None, layout_nms_threshold=0.5, layout_score_threshold=0.5, max_batch_size=10, max_text_length=25, merge_no_span_structure=True, min_subgraph_size=15, mode='structure', ocr=True, ocr_order_method=None, ocr_version='PP-OCRv3', output='./output', page_num=0, precision='fp32', process_id=0, re_model_dir=None, rec=True, rec_algorithm='SVTR_LCNet', rec_batch_num=6, rec_char_dict_path='C:\\Users\\86159\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\paddleocr\\ppocr\\utils\\ppocr_keys_v1.txt', rec_image_inverse=True, rec_image_shape='3, 48, 320', rec_model_dir='./inference/ch_PP-OCRv3_rec_infer/', recovery=False, save_crop_res=False, save_log_path='./log_output/', scales=[8, 16, 32], ser_dict_path='../train_data/XFUND/class_list_xfun.txt', ser_model_dir=None, show_log=True, sr_batch_num=1, sr_image_shape='3, 32, 128', sr_model_dir=None, structure_version='PP-StructureV2', table=True, table_algorithm='TableAttn', table_char_dict_path=None, table_max_len=488, table_model_dir=None, total_process_num=1, type='ocr', use_angle_cls=True, use_dilation=False, use_gpu=False, use_mp=False, use_npu=False, use_onnx=False, use_pdf2docx_api=False, use_pdserving=False, use_space_char=True, use_tensorrt=False, use_visual_backbone=True, use_xpu=False, vis_font_path='./doc/fonts/simfang.ttf', warmup=False)
[2023/06/25 10:38:42] ppocr DEBUG: dt_boxes num : 1, elapse : 0.018141746520996094
[2023/06/25 10:38:42] ppocr DEBUG: cls num  : 1, elapse : 0.007776021957397461
[2023/06/25 10:38:43] ppocr DEBUG: rec_res num  : 1, elapse : 0.23012638092041016
points :  [[16.0, 14.0], [514.0, 14.0], [514.0, 33.0], [16.0, 33.0]]
text :  哲学可以帮助辨别现代科技创新发展的方户
score :  0.8683586120605469
==========================================
3,转换图片,阈值=200时,再转换为ndarray数组, 识别图片文本
threshold :  200
[2023/06/25 10:38:43] ppocr DEBUG: Namespace(alpha=1.0, benchmark=False, beta=1.0, cls_batch_num=6, cls_image_shape='3, 48, 192', cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_infer/', cls_thresh=0.9, cpu_threads=10, crop_res_save_dir='./output', det=True, det_algorithm='DB', det_box_type='quad', det_db_box_thresh=0.6, det_db_score_mode='fast', det_db_thresh=0.3, det_db_unclip_ratio=1.5, det_east_cover_thresh=0.1, det_east_nms_thresh=0.2, det_east_score_thresh=0.8, det_limit_side_len=960, det_limit_type='max', det_model_dir='./inference/ch_PP-OCRv3_det_infer/', det_pse_box_thresh=0.85, det_pse_min_area=16, det_pse_scale=1, det_pse_thresh=0, det_sast_nms_thresh=0.2, det_sast_score_thresh=0.5, draw_img_save_dir='./inference_results', drop_score=0.5, e2e_algorithm='PGNet', e2e_char_dict_path='./ppocr/utils/ic15_dict.txt', e2e_limit_side_len=768, e2e_limit_type='max', e2e_model_dir=None, e2e_pgnet_mode='fast', e2e_pgnet_score_thresh=0.5, e2e_pgnet_valid_set='totaltext', enable_mkldnn=False, fourier_degree=5, gpu_mem=500, help='==SUPPRESS==', image_dir=None, image_orientation=False, ir_optim=True, kie_algorithm='LayoutXLM', label_list=['0', '180'], lang='ch', layout=True, layout_dict_path=None, layout_model_dir=None, layout_nms_threshold=0.5, layout_score_threshold=0.5, max_batch_size=10, max_text_length=25, merge_no_span_structure=True, min_subgraph_size=15, mode='structure', ocr=True, ocr_order_method=None, ocr_version='PP-OCRv3', output='./output', page_num=0, precision='fp32', process_id=0, re_model_dir=None, rec=True, rec_algorithm='SVTR_LCNet', rec_batch_num=6, rec_char_dict_path='C:\\Users\\86159\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\paddleocr\\ppocr\\utils\\ppocr_keys_v1.txt', rec_image_inverse=True, rec_image_shape='3, 48, 320', rec_model_dir='./inference/ch_PP-OCRv3_rec_infer/', recovery=False, save_crop_res=False, save_log_path='./log_output/', scales=[8, 16, 32], ser_dict_path='../train_data/XFUND/class_list_xfun.txt', ser_model_dir=None, show_log=True, sr_batch_num=1, sr_image_shape='3, 32, 128', sr_model_dir=None, structure_version='PP-StructureV2', table=True, table_algorithm='TableAttn', table_char_dict_path=None, table_max_len=488, table_model_dir=None, total_process_num=1, type='ocr', use_angle_cls=True, use_dilation=False, use_gpu=False, use_mp=False, use_npu=False, use_onnx=False, use_pdf2docx_api=False, use_pdserving=False, use_space_char=True, use_tensorrt=False, use_visual_backbone=True, use_xpu=False, vis_font_path='./doc/fonts/simfang.ttf', warmup=False)
[2023/06/25 10:38:43] ppocr DEBUG: dt_boxes num : 1, elapse : 0.017957448959350586
[2023/06/25 10:38:43] ppocr DEBUG: cls num  : 1, elapse : 0.008005380630493164
[2023/06/25 10:38:43] ppocr DEBUG: rec_res num  : 1, elapse : 0.21948766708374023
points :  [[16.0, 14.0], [513.0, 14.0], [513.0, 33.0], [16.0, 33.0]]
text :  哲学可以帮助孵别现代科技创新发展的方向
score :  0.8875740170478821
==========================================
4,转换图片,阈值=220时,再转换为ndarray数组, 识别图片文本
threshold :  220
[2023/06/25 10:38:43] ppocr DEBUG: Namespace(alpha=1.0, benchmark=False, beta=1.0, cls_batch_num=6, cls_image_shape='3, 48, 192', cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_infer/', cls_thresh=0.9, cpu_threads=10, crop_res_save_dir='./output', det=True, det_algorithm='DB', det_box_type='quad', det_db_box_thresh=0.6, det_db_score_mode='fast', det_db_thresh=0.3, det_db_unclip_ratio=1.5, det_east_cover_thresh=0.1, det_east_nms_thresh=0.2, det_east_score_thresh=0.8, det_limit_side_len=960, det_limit_type='max', det_model_dir='./inference/ch_PP-OCRv3_det_infer/', det_pse_box_thresh=0.85, det_pse_min_area=16, det_pse_scale=1, det_pse_thresh=0, det_sast_nms_thresh=0.2, det_sast_score_thresh=0.5, draw_img_save_dir='./inference_results', drop_score=0.5, e2e_algorithm='PGNet', e2e_char_dict_path='./ppocr/utils/ic15_dict.txt', e2e_limit_side_len=768, e2e_limit_type='max', e2e_model_dir=None, e2e_pgnet_mode='fast', e2e_pgnet_score_thresh=0.5, e2e_pgnet_valid_set='totaltext', enable_mkldnn=False, fourier_degree=5, gpu_mem=500, help='==SUPPRESS==', image_dir=None, image_orientation=False, ir_optim=True, kie_algorithm='LayoutXLM', label_list=['0', '180'], lang='ch', layout=True, layout_dict_path=None, layout_model_dir=None, layout_nms_threshold=0.5, layout_score_threshold=0.5, max_batch_size=10, max_text_length=25, merge_no_span_structure=True, min_subgraph_size=15, mode='structure', ocr=True, ocr_order_method=None, ocr_version='PP-OCRv3', output='./output', page_num=0, precision='fp32', process_id=0, re_model_dir=None, rec=True, rec_algorithm='SVTR_LCNet', rec_batch_num=6, rec_char_dict_path='C:\\Users\\86159\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\paddleocr\\ppocr\\utils\\ppocr_keys_v1.txt', rec_image_inverse=True, rec_image_shape='3, 48, 320', rec_model_dir='./inference/ch_PP-OCRv3_rec_infer/', recovery=False, save_crop_res=False, save_log_path='./log_output/', scales=[8, 16, 32], ser_dict_path='../train_data/XFUND/class_list_xfun.txt', ser_model_dir=None, show_log=True, sr_batch_num=1, sr_image_shape='3, 32, 128', sr_model_dir=None, structure_version='PP-StructureV2', table=True, table_algorithm='TableAttn', table_char_dict_path=None, table_max_len=488, table_model_dir=None, total_process_num=1, type='ocr', use_angle_cls=True, use_dilation=False, use_gpu=False, use_mp=False, use_npu=False, use_onnx=False, use_pdf2docx_api=False, use_pdserving=False, use_space_char=True, use_tensorrt=False, use_visual_backbone=True, use_xpu=False, vis_font_path='./doc/fonts/simfang.ttf', warmup=False)
[2023/06/25 10:38:44] ppocr DEBUG: dt_boxes num : 1, elapse : 0.019538402557373047
[2023/06/25 10:38:44] ppocr DEBUG: cls num  : 1, elapse : 0.00800013542175293
[2023/06/25 10:38:44] ppocr DEBUG: rec_res num  : 1, elapse : 0.22036981582641602
points :  [[15.0, 14.0], [515.0, 14.0], [515.0, 33.0], [15.0, 33.0]]
text :  哲学可以帮助辩别现代科技创新发展的方向
score :  0.8834166526794434
==========================================

通过测试结果可以看出,图片经过二值化转换后,再转换为ndarray数组,最后再调用PaddlerOCR识别方法,返回的识别文本最为准确。

之前也了解过OCR识别的步骤流程,后面还要继续深入学习下,从这几个方面提高图片识别率。

=====================================================================

步骤流程:

1. 图像输入、预处理:

  不同的图像格式有不同的存储、压缩方式,目前有OpenCV、CxImage等。

2. 二值化:

  如今数码摄像头拍摄的图片大多是彩色图像,彩色图像所含信息量巨大,不适用于OCR技术。为了让计算机更快的、更好地进行OCR相关计算,

  我们需要先对彩色图进行处理,使图片只剩下前景信息与背景信息。二值化也可以简单地将其理解为“黑白化”。

3. 图像降噪:

  对于不同的图像根据噪点的特征进行去噪的过程称为降噪。

4. 倾斜校正:

  由于一般用户,在拍照文档时,难以拍摄得完全符合水平平齐与竖直平齐(我本人就经常拍的歪歪扭扭),

  因此拍照出来的图片不可避免的产生倾斜,这就需要图像处理软件进行校正。 

5. 版面分析:

  将文档图片分段落,分行的过程称为版面分析。 

6. 字符切割:

  由于拍照、书写条件的限制,经常造成字符粘连、断笔,直接使用此类图像进行OCR分析将会极大限制OCR性能。

  因此需要进行字符切割,即:将不同字符之间分割开。 

7. 字符识别:

  早期以模板匹配为主,后期以结合深度网络的特征提取为主。版面还原:将识别后的文字像原始文档图片那样排列,

  段落、位置、顺序不变地输出到Word文档、PDF文档等,这一过程称为版面还原。

8. 后期处理:根据特定的语言上下文的关系,对识别结果进行校正。

9. 输出:将识别出的字符以某一格式的文本输出。

=====================================================================

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/987781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

向左偏移的云应用容器监控方法

向左偏移是一种在软件开发生命周期的早期强调测试、监控和自动化的软件开发和操作方法。向左偏移方法的目标是通过尽早发现问题并迅速解决,从而预防问题的发生。 当您尽早发现可扩展性问题或错误时,解决它将更加迅速和经济高效。将低效的代码移动到云容…

使用Jsmooth打包JavaFx程序为EXE文件

配置IDEA 第一步: 第二步: MANIFEST.MF的文件路径,必须在resources文件夹中,如果没有,就创建一个。 第三步:配置项目所需jar包的相对路径 最后: 点击确定后,编译Jar 配置Jsmooth …

Docker从认识到实践再到底层原理(四-1)|Docker镜像仓库|超详细详解

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

k8s node环境部署(三)

1、添加node1、node2环境 前面配置master环境的截图最后一段 复制下来 分别在node主机执行 kubeadm join 192.168.37.132:6443 --token p5omh3.cqjqt8ymrwkdn2fc \ --discovery-token-ca-cert-hash sha256:608a1cbadd060cfdeac2fae84c19609061b750ab51bf9a19887ff7ea…

恒运资本:消费电子概念再爆发,冠石科技三连板,捷荣技术9日大涨127%

消费电子概念8日盘中再度走高,截至发稿,利和兴涨近15%,日久光电、冠石科技、捷荣技能、华映科技、东睦股份等涨停,大富科技涨超7%。 值得注意的是,冠石科技已接连3日涨停,公司昨日晚间发布危险提示称&…

数字钥匙关键技术:UWB(超宽带)实现原理一文讲透

在之前的文章《一文讲透超宽带(UWB)前世今生》中,我们从起源、定义、标准、发展、应用等角度概述了UWB技术。根据UWB的特性,其基础功能分为:数据传输、雷达成像、测距定位。接下来我们将概述其数据传输和雷达成像功能&…

YOLOV7改进-对小目标有效的BiFormer注意力机制

如果要在sppcspc后面加一个注意力模块BiFormer 1、 普通加 1、models-common.py搜这个模块 2、直接加 3、全部复制下来,models新建文件 4、common导入进来 5、填上一层的输出通道数 2、模块里加 难点:在配置文件找到对应的这一块 yolov7x中 1、…

GE IS220PDIAH1A 336A4940CSP1 控制主板模块

GE IS220PDIAH1A 336A4940CSP1 是一款控制主板模块,通常用于工业自动化和控制系统中。以下是可能与这种控制主板模块相关的一些产品功能: 信号处理: GE IS220PDIAH1A 336A4940CSP1控制主板模块通常负责信号处理,可以接收、放大、滤…

机器学习算法基础--线性回归算法

目录 1.算法求解步骤 2.算法核心代码 3.算法效果展示 1.算法求解步骤 线性回归算法流程: #1.数据导入与处理 #2.创建线性回归模型并拟合数据 #3.计算回归直线的斜率和截距 #4.预测 x5 时的y值 #5.进行进一步预测 #5.进行进一步预测 2.算法核心代码 #机器学习算法基础第一…

数据结构与算法:练习与实践的重要性

文章目录 为什么练习与实践很重要?1. 熟练应用2. 问题解决能力3. 代码效率4. 面试准备 如何练习与实践?1. 在线评测平台2. 自主设计数据结构3. 解决不同类型的问题 持续学习与实践 🎉欢迎来到数据结构学习专栏~数据结构与算法:练习…

MySQL使用CASE WHEN统计SQL语句代替子查询SQL统计,CASE WHEN常用写法,根据不同的条件对数据进行分类、分组和聚合

MySQL中,写一个CASE WHEN的统计SQL语句,代替子查询SQL统计语句 假设我们有一个名为"orders"的表,其中包含订单信息,包括订单号(order_id)、订单金额(order_amount)等列。我们想要统计每个订单级别的订单数量&#xff0c…

深度学习:基于循环神经网络RNN实现自然语言生成

目录 1 循环神经网络介绍 1.1 什么是循环神经网络 1.2 RNN的网络结构 1.3 RNN的工作原理 ​编辑 1.4 RNN的应用场景 2 基于RNN实现语句生成 2.1 句子生成介绍 2.2 基于pytorch实现语句生成 2.3 完整代码 2.4 该模型的局限 3 总结 1 循环神经网络介绍 1.1 什么是循环…

Anaconda - 操作系统安装程序 简要介绍

Anaconda 简要介绍 1. Anaconda 简介2. Anaconda 体系结构3. Anaconda 开发模型4. Anaconda 启动概述5. Anaconda 源码1. 接口2. 自定义组件3. 硬盘分区:使用python-blivet包4. Bootloader5. 各个步骤的配置:6. 安装软件包:7. 安装控制&#…

华为强势回归,苹果iPhone15ProMax独占潜望式镜头,预计销量受损

9月8日消息,据集邦咨询发布的产业洞察报告显示,苹果即将发布的iPhone 15 Pro Max将会独占潜望式镜头,该机型的占比预计将会达到40%左右。报告同时预估,今年iPhone 15系列手机的出货量将达到8000万,相比去年同期增长6%以…

无需公网IP教你如何外网远程访问管家婆ERP进销存

文章目录 前言 1.管家婆服务2. 内网穿透2.1 安装cpolar内网穿透2.2 设置远程访问 3. 固定访问地址4. 配置固定公网访问地址 前言 管家婆辉煌系列产品是中小企业进销存、财务管理一体化的典范软件,历经十余年市场的洗礼,深受广大中小企业的欢迎&#xff…

冠达管理:不要误读“房贷利率降低”

最近,人人都知道房贷利率降了,但如果细问“怎么降的、哪些城市降了、将产生何种影响”,恐怕不少人都是水中望月。正因此,部分房地产中介、营销机构利用购房者的信息不对称劣势,刻意夸张房贷利率下降关于楼市价格的影响…

16 除自身以外数组的乘积

除自身以外数组的乘积 题解1 前缀积*后缀积题解2 空间优化 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数…

YAPI的搭建和使用

https://www.cnblogs.com/yehuisir/p/12315137.html 1、#进入数据库 mongo 2、#进入admin库 use admin 3、#添加一个用户root(此步骤可不执行) db.createUser({user:"root",pwd:"123456abc.COM",roles:["root"]}) …

【合作 】联通、壳牌、联想、国金证券等众多企业签约 Eolink !

联通、壳牌、联想、华润置地、中国铁塔等多家知名企业签约 Eolink,携手落地 API 全生命周期管理,感谢广大企业对 Eolink 的信任和选择! Eolink 致力于为企业提供最全面的 API 研发管理解决方案,提供高效、可靠的工具以及服务&…

深入了解 Axios 的 put 请求:使用技巧与最佳实践

在前端开发中,我们经常需要与后端服务器进行数据交互。其中,PUT 请求是一种常用的方法,用于向服务器发送更新或修改数据的请求。通过发送 PUT 请求,我们可以更新服务器上的资源状态。 Axios 是一个流行的 JavaScript 库&#xff0…