Python は OCR 深層学習に基づいて製品成分リスト認識を実装します

1。概要

        現在、国民や国は食の安全性を重視していますが、食品を長期保存し、美味しくいただくために、事業者は過剰な量の食品添加物や、人体に重大な害を及ぼす食品添加物を添加しています。インスタント ラーメンを例に挙げると、インスタント ラーメン 1 パックには最大 25 種類の食品添加物が含まれています。一般的なものには、グルタミン酸ナトリウム、カラメル色素、クエン酸、tert-ブチルハイドロキノンなどが含まれます。小児がクエン酸を含む製品を長期間摂取すると、低カルシウム血症を引き起こす可能性があります。そのため、食品を選ぶ際には、品質が高く評判の良い大手メーカーの食品を選ぶようにしましょう。そして、食品成分表を読んで、食品添加物の少ない食品を購入するように努めてください。

f369e3e0f88e493fe6a08675402eed8f.jpeg

        私は、現在ホットなトピックについて食品成分認識を研究し、実装してきました。下の表に示すように、現在の研究で一般的に使用されているオープンソースの OCR 認識モデルがいくつかあります。各モデルの長所と短所について簡単に説明します。Paddleocr は非常に便利です使用するのは国産の認識モデル(Baidu製)です Pythonで対応モジュールをインストールするだけです 認識速度と効果はこの中で一番(個人の感覚です) レベルの異なるモデルを置き換えることができますサーバー レベルの chinese_ocr_db_crnn_server、モバイル レベルの chinese_ocr_db_crnn_mobile など。 chineseocr_lite も軽量な認識モデルですが、paddleocr と比較すると、複雑な認識シナリオでの認識速度と効果が劣るため、他については触れません。

OCRモデル
名前 住所
パドルオク PaddleHub ワンクリック OCR 中国語認識 (超軽量 810 万モデル、人気) - PaddleHub AI Studio
chineseocr_lite GitHub - DayBreak-u/chineseocr_lite: 超軽量の中国語 OCR、縦書きテキスト認識をサポート、ncnn、mnn、tnn 推論をサポート (dbnet(1.8M) + crnn(2.5M) + anglenet(378KB)) 合計モデルはわずか 4.7 M
中国 GitHub - 中国語/中国語: yolo3+ocr
easyocr pip install easyocr

        従来の OCR モデルの認識プロセスは主に 2 つのステップで構成されます: テキスト位置認識 + テキスト認識 従来の認識モデルは ctpn テキスト検出 + crnn テキスト認識を使用し、chineseocr_lite モデルの yolov3+crnn を使用して実装されます。

0bcd8ddbf9d74db8b7da54a3b338211a.png

 2. Docker+FlaskでPaddleOCR認識環境を構築

  • 基本的な環境構築

# docker Python をインストールする

docker pull Python:3.8.12

#インストール後のサービス環境の作成

docker run -dit -p 13000:5000 docker.io/python:3.8.12 --name api_server

# 環境に入る

docker exec -it 5eba0c1402bc /bin/bash

  • 関連モジュールの構成

#コンパイル環境をインストールする

apt-get update && apt-get インストール libgl1

vim を適切にインストールする

# paddleOCR をインストールする

pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install Shapely -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install pyclipper -i https://pypi.tuna.tsinghua.edu.cn/simple

  • Falsk サービスを構築する
# coding:utf-8
from flask import Flask
from flask import jsonify
from flask import request
import paddlehub as hub
import cv2
import numpy as np
import base64
app = Flask(__name__)

@app.route("/api/ocr",methods=["POST"])
def ocr():
    try:
        image_str = request.json.get("image")
        image_np = np.fromstring(base64.b64decode(image_str.split(';base64,')[1]), dtype=np.uint8)
        image_array = cv2.imdecode(image_np, cv2.IMREAD_COLOR)
        result = []
        #if is_blurry(image_array):
            #print("chpp")
        result = chpp_ocr.recognize_text(images=[image_array], box_thresh= 0.1, text_thresh= 0.1, angle_classification_thresh=0.9, det_db_unclip_ratio=1.5)
        #else:
            #print("mobile")
            #result = mobile_ocr.recognize_text(images=[image_array], box_thresh= 0.1, text_thresh= 0.1, angle_classification_thresh=0.9)
        data = [i["text"] for i in result[0]["data"]]
        return jsonify({"code":200,"data":data})
    except Exception as e:
        return jsonify({"code":400,"data":str(e)})

def is_blurry(image_array):
    gray = cv2.cvtColor(image_array, cv2.COLOR_BGR2GRAY)
    fm = cv2.Laplacian(gray, cv2.CV_64F).var()
    print("blurry:" + str(fm))
    return fm < 550

if __name__ == '__main__':
    global mobile_ocr
    global chpp_ocr
    mobile_ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")
    print("加载mobile模型完成")
    chpp_ocr = hub.Module(name="ch_pp-ocrv3")
    print("加载chpp模型完成")
    app.config['JSON_AS_ASCII'] = False
    app.run(host="0.0.0.0", port=5000)
  • サービスの実行

以下のようにサービス起動スクリプトを作成し、nohupを使用して起動します。

nohup python api_server.py > log.log 2>&1 &

  • インターフェイスのテスト

apipost テスト ソフトウェアを使用してインターフェイス テストを実施します。送信されるデータ型は json 文字列で、画像の Base64 文字を渡すことができます。

22454ef230ef44d796​​6a4b2d232f3fb6.png

 

 

 

おすすめ

転載: blog.csdn.net/m0_43432638/article/details/127987027