1。概要
現在、国民や国は食の安全性を重視していますが、食品を長期保存し、美味しくいただくために、事業者は過剰な量の食品添加物や、人体に重大な害を及ぼす食品添加物を添加しています。インスタント ラーメンを例に挙げると、インスタント ラーメン 1 パックには最大 25 種類の食品添加物が含まれています。一般的なものには、グルタミン酸ナトリウム、カラメル色素、クエン酸、tert-ブチルハイドロキノンなどが含まれます。小児がクエン酸を含む製品を長期間摂取すると、低カルシウム血症を引き起こす可能性があります。そのため、食品を選ぶ際には、品質が高く評判の良い大手メーカーの食品を選ぶようにしましょう。そして、食品成分表を読んで、食品添加物の少ない食品を購入するように努めてください。
私は、現在ホットなトピックについて食品成分認識を研究し、実装してきました。下の表に示すように、現在の研究で一般的に使用されているオープンソースの OCR 認識モデルがいくつかあります。各モデルの長所と短所について簡単に説明します。Paddleocr は非常に便利です使用するのは国産の認識モデル(Baidu製)です Pythonで対応モジュールをインストールするだけです 認識速度と効果はこの中で一番(個人の感覚です) レベルの異なるモデルを置き換えることができますサーバー レベルの chinese_ocr_db_crnn_server、モバイル レベルの chinese_ocr_db_crnn_mobile など。 chineseocr_lite も軽量な認識モデルですが、paddleocr と比較すると、複雑な認識シナリオでの認識速度と効果が劣るため、他については触れません。
名前 | 住所 |
パドルオク | 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 を使用して実装されます。
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 文字を渡すことができます。