日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PaddleOCR 文字检测部分源码学习(1)

發布時間:2024/1/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PaddleOCR 文字检测部分源码学习(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2021SC@SDUSC

代碼位置:tools->infer->predict_det.py
class TextDetector(object):def __init__(self, args):self.args = argsself.det_algorithm = args.det_algorithmpre_process_list = [{'DetResizeForTest': {'limit_side_len': args.det_limit_side_len,'limit_type': args.det_limit_type,}}, {'NormalizeImage': {'std': [0.229, 0.224, 0.225],'mean': [0.485, 0.456, 0.406],'scale': '1./255.','order': 'hwc'}}, {'ToCHWImage': None}, {'KeepKeys': {'keep_keys': ['image', 'shape']}}]postprocess_params = {}

這里是一些參數的初始化。

if self.det_algorithm == "DB":postprocess_params['name'] = 'DBPostProcess'postprocess_params["thresh"] = args.det_db_threshpostprocess_params["box_thresh"] = args.det_db_box_threshpostprocess_params["max_candidates"] = 1000postprocess_params["unclip_ratio"] = args.det_db_unclip_ratiopostprocess_params["use_dilation"] = args.use_dilationpostprocess_params["score_mode"] = args.det_db_score_modeelif self.det_algorithm == "EAST":postprocess_params['name'] = 'EASTPostProcess'postprocess_params["score_thresh"] = args.det_east_score_threshpostprocess_params["cover_thresh"] = args.det_east_cover_threshpostprocess_params["nms_thresh"] = args.det_east_nms_threshelif self.det_algorithm == "SAST":pre_process_list[0] = {'DetResizeForTest': {'resize_long': args.det_limit_side_len}}postprocess_params['name'] = 'SASTPostProcess'postprocess_params["score_thresh"] = args.det_sast_score_threshpostprocess_params["nms_thresh"] = args.det_sast_nms_threshself.det_sast_polygon = args.det_sast_polygonif self.det_sast_polygon:postprocess_params["sample_pts_num"] = 6postprocess_params["expand_scale"] = 1.2postprocess_params["shrink_ratio_of_width"] = 0.2else:postprocess_params["sample_pts_num"] = 2postprocess_params["expand_scale"] = 1.0postprocess_params["shrink_ratio_of_width"] = 0.3else:logger.info("unknown det_algorithm:{}".format(self.det_algorithm))sys.exit(0)

這是對三大文字檢測算法的選擇,即EAST算法,SAST算法和DB算法。

  • EAST算法:

  • 簡單而強大的pipeLine,可以在自然場景中進行快速準確的文本檢測。該Pipeline直接預測圖像中任意方向和矩形形狀的文本或文本行,通過單個神經網絡消除不必要的中間步驟(例如候選聚合和單詞分割)。
  • 僅有兩個階段:一個階段是基于全卷積網絡(FCN)模型,直接產生文本框預測;第二個階段是對生成的文本預測框(可以是旋轉矩形或矩形)經過非極大值抑制以產生最終結果。該模型放棄了不必要的中間步驟,進行端到端的訓練和優化。
  • 3. 算法框架:首先,將圖像送到FCN網絡結構中并且生成單通道像素級的文本分數特征圖和多通道幾何圖形特征圖。文本區域采用了兩種幾何形狀:旋轉框(RBOX)和水平(QUAD),并為每個幾何形狀設計了不同的損失函數;然后,將閾值應用于每個預測區域,其中評分超過預定閾值的幾何形狀被認為是有效的,并且保存以用于隨后的非極大抑制。NMS之后的結果被認為是pipeline的最終結果。
  • SAST算法:百度自研文字檢測算法,一種基于分割的one-shot任意形狀文本檢測器

  • 實際上就是EAST算法的擴展,一階段,輸出為multitask,各個分支相互校正。

  • 它利用基于全卷積網絡(FCN)的上下文多任務學習框架來學習文本區域的各種幾何特征,從而構造文本區域的多邊形表示。考慮到文本的連續性特征,通過引入Context Attention Block 捕捉像素的長范圍相關性,一次來獲得更加可靠的分割結果。在后處理過程中,提出一個點到邊的對齊方法,來將像素聚類稱為文本實力,這樣就通過一次采樣圖片,把高級別的特征和低級別的特征結合在一起。此外,利用所提出的幾何性質可以更有效地提取任意形狀文本的多邊形表示。

  • def order_points_clockwise(self, pts):xSorted = pts[np.argsort(pts[:, 0]), :]leftMost = xSorted[:2, :]rightMost = xSorted[2:, :]leftMost = leftMost[np.argsort(leftMost[:, 1]), :](tl, bl) = leftMostrightMost = rightMost[np.argsort(rightMost[:, 1]), :](tr, br) = rightMostrect = np.array([tl, tr, br, bl], dtype="float32")return rect

    作用:順時針對點進行排序,首先根據橫坐標找到最左邊和最右邊的的點,然后針對最左邊的數據根據他們的縱坐標進行排序,我們可以找到最上面和最下面的點

    代碼位置:deploy->hubserving->ocr_det->module.py
    def predict(self, images=[], paths=[]):if images != [] and isinstance(images, list) and paths == []:predicted_data = imageselif images == [] and isinstance(paths, list) and paths != []:predicted_data = self.read_images(paths)else:raise TypeError("The input data is inconsistent with expectations.")assert predicted_data != [], "There is not any image to be predicted. Please check the input data."all_results = []for img in predicted_data:if img is None:logger.info("error in loading image")all_results.append([])continuedt_boxes, elapse = self.text_detector(img)logger.info("Predict time : {}".format(elapse))rec_res_final = []for dno in range(len(dt_boxes)):rec_res_final.append({'text_region': dt_boxes[dno].astype(np.int).tolist()})all_results.append(rec_res_final)return all_results

    作用:獲取預測圖像中的文本框。

    輸入參數:def predict(self, images=[], paths=[])

  • self:實例對象本身
  • images:一個列表,且每個圖像的形狀為[H,W,C]
  • paths: 圖像的路徑,文本檢測框的結果和圖像的保存路徑。
  • for dno in range(len(dt_boxes)):rec_res_final.append({'text_region': dt_boxes[dno].astype(np.int).tolist()})

    總結

    以上是生活随笔為你收集整理的PaddleOCR 文字检测部分源码学习(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。