Use el marco Flask para implementar rápidamente la interfaz API de reconocimiento de matrículas HyperLPR

descripción general

El número de matrícula se puede leer rápidamente a través de la biblioteca de código abierto HyperLPR. Para mayor comodidad, podemos empaquetar el script de Python en una interfaz WEBAPI e implementarlo con Flask ligero para facilitar el acoplamiento y el uso de aplicaciones de terceros.
Implementación principal: cargue una foto que contenga el número de matrícula a través de la interfaz API, y la interfaz API le dará el resultado del reconocimiento de matrícula. Al mismo tiempo, proporciona una URL de visualización de imágenes en línea y marca la matrícula.
Dirección oficial de HyperLPR: https://github.com/zeusees/HyperLPR

Instalar entorno de biblioteca

Instalar Anaconda

Anaconda es un programa de administración de paquetes de python de uso común, que puede configurar múltiples entornos de python.
Descargue el script de instalación de Anaconda

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh --no-check-certificate

Una vez completada la descarga, ejecute la instalación, se le pedirá que lea la autorización, simplemente presione Entrar todo el tiempo

sh Anaconda3-2021.05-Linux-x86_64.sh

Luego, le preguntará si está de acuerdo, ingrese sí,
se le preguntará sobre la ubicación de instalación durante el proceso de instalación, generalmente no necesita cambiarla, solo presione Entrar, se descomprimirá automáticamente.
Finalmente, se le preguntará si desea inicializar algunas configuraciones de Anaconda, recuerde ingresar sí

Después de la instalación, configure Anaconda para la variable de entorno, y puede usar el comando de acceso directo conda

vim ~/.bashrc #编辑环境配置文件
export PATH="~/anaconda3/bin:$PATH" # 在第一行加入这个

Ingrese i en vim para editar, presione Esc después de editar y luego ingrese: wq para guardar la modificación

Después de guardar, actualice la variable de entorno e ingrese en la línea de comando:

source ~/.bash_profile

Finalmente, verifique si la configuración es exitosa, si no se guarda, ¡la configuración es exitosa!

Después de la instalación, cree un entorno python3.8, ejecute el comando, habrá una confirmación, ingrese y, y luego presione Entrar

conda create --name hyperlpr_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

Activar el entorno hyperlpr_env

conda activate hyperlpr_env

Instalar Hyperlpr y Flask

#更新pip源
pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装HyperLPR
pip3 install hyperlpr -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装HyperLPR指定的opencv版本
pip3 install opencv-python==3.4.9.31 -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装flask框架用于搭建WebApi接口
pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装requests用于测试接口请求
pip3 install requests  -i https://pypi.tuna.tsinghua.edu.cn/simple

Implementar código de secuencia de comandos de Python

import base64
import flask
import json
import cv2
import numpy as np
from flask import Flask, request, make_response
from hyperlpr import *

sever = Flask(__name__)

@sever.route("/hyperlpr_file.do", methods=["post"])
def upload():
    # 上传文件,取一个名字,再给名字一个默认值None
    f = flask.request.files.get('file', None)
    if f:
        # 如果文件不为空
        image = np.asarray(bytearray(f.read()), dtype="uint8")
        image = cv2.imdecode(image, cv2.IMREAD_COLOR)
        # 识别结果
        plates = HyperLPR_plate_recognition(image)
        print(plates)
        # [['川A00000', 0.9829636641911098, [256, 184, 391, 231]]]
        arr = []
        for plate in plates:
            label = plate[0]
            confidence = plate[1]
            point = plate[2]
            arr.append({
    
    'label': label, 'confidence': confidence, 'point': point})
        plates_info = {
    
    'plates': arr}
        res = {
    
    "rc": 0, 'data': plates_info}
    else:
        # 如果文件为空
        res = {
    
    "rc": -1}
    return json.dumps(res, ensure_ascii=False)  # 防止出现乱码

@sever.route("/hyperlpr_base64.do", methods=["post"])
def hyperlpr_base64():
    # 上传文件,取一个名字,再给名字一个默认值None
    raw_data = flask.request.get_data("data")
    if raw_data:
        # print(raw_data)
        raw_json = json.loads(raw_data)
        image_base64 = raw_json['images'][0]
        # print(image_base64)
        image_bytes = np.asarray(bytearray(base64.b64decode(image_base64)), dtype="uint8")
        # print(image_bytes)
        image = cv2.imdecode(image_bytes, cv2.IMREAD_COLOR)
        # 识别结果
        plates = HyperLPR_plate_recognition(image)
        print(plates)
        # [['川A00000', 0.9829636641911098, [256, 184, 391, 231]]]
        arr = []
        for plate in plates:
            label = plate[0]
            confidence = plate[1]
            point = plate[2]
            arr.append({
    
    'label': label, 'confidence': confidence, 'point': point})
        plates_info = {
    
    'plates': arr}
        res = {
    
    "rc": 0, 'data': plates_info}
        # res = {
    
    "rc": 0}
    else:
        # 如果文件为空
        res = {
    
    "rc": -1}
    return json.dumps(res, ensure_ascii=False)  # 防止出现乱码


sever.run(host='0.0.0.0', port=8888)

Copie el script anterior en un directorio determinado del servidor, cópielo aquí en /home/hyperlpr/, cree un nuevo archivo hyperlpr_server.py
inserte la descripción de la imagen aquí
para iniciar el servicio en segundo plano

nohup python -u hyperlpr_server.py > log.txt 2>&1 &

Si se informa un error al ejecutar el servicio:
nohup: ignorando
el rastreo de entrada (última llamada más reciente):
Archivo "hyperlpr_server.py", línea 5, en
import cv2
File "/anaconda3/envs/hyperlpr_env/lib/python3.8/site-packages/cv2/ init .py", línea 3, en
from .cv2 import *
Error de importación: libSM.so.6: no se puede abrir el archivo de objeto compartido : No existe tal archivo o directorio Solución:
consulte el siguiente documento para resolver https://www.cnblogs.com/funykatebird/p/14715567.html
Estoy usando Centos7 de 64 bits aquí, y los pasos de instalación son los siguientes:

sudo yum install libSM-1.2.2-2.el7.x86_64 --setopt=protected_multilib=false
sudo yum install libXrender-0.9.10-1.el7.x86_64 --setopt=protected_multilib=false
sudo yum install mesa-libGL.x86_64

ver proceso

ps -ef|grep python

cerrar proceso

kill -9 19913

ver registro

tail -f 1000 log.txt

Cómo verificar la ocupación del puerto

$: netstat -anp | grep 8888
tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      13404/python3       
tcp        0      1 172.17.0.10:34036       115.42.35.84:8888       SYN_SENT    14586/python3 

Matar a la fuerza el proceso: por pid

$: kill -9 13404
$: kill -9 14586
$: netstat -anp | grep 8888

demostración de llamada remota

  • Use Postman para enviar datos de demostración
    inserte la descripción de la imagen aquí
    y obtener resultados:
{
    
    
    "rc": 0,
    "data": {
    
    
        "plates": [
            {
    
    
                "label": "京G65467",
                "confidence": 0.9797496455056327,
                "point": [
                    203,
                    440,
                    302,
                    473
                ]
            }
        ]
    }
}

Descarga del archivo de implementación del servidor: https://download.csdn.net/download/loutengyuan/86773203

Supongo que te gusta

Origin blog.csdn.net/loutengyuan/article/details/126531910
Recomendado
Clasificación