Блог

Работа с машинным зрением. Вас душит Питон?

2022-09-13 18:27 Блог разработчика
Решили тут мы на досуге разработать свою программную часть для tcp/ip камеры. Чтобы можно было установить ПО на микрокомпьютер, подключить к нему объектив (по типу WEB камеры) и распознать полученное изображение.

Эта разработка расширит фунционал нашего продукта Cluster Hub

Результатом подобного эксперимента хочу поделиться с читателями.

В качестве языка реализации задачи был выбран Python. В основном из-за готовых библиотек для работы с машинным зрением.

Далее, как говорится - дело техники.
# main.py
from distutils.log import debug
import os
import io
import requests
from PIL import Image
from flask import Flask, request
from pyzbar import pyzbar
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SECRET_KEY'] = 'I have a dream'
app.config['UPLOADED_PHOTOS_DEST'] = os.path.join(basedir, 'uploads')
 
# В качестве входящих данных используется ссылка на изображение.
# http://127.0.0.1:5000/?url=https://habrastorage.org/webt/l-/kt/xo/l-ktxopaccb_sul1jd_jnw65jei.png
# Которое мы выкачиваем в виде байткода и скармливаем библиотеке pyzbar 

@app.route('/', methods=['GET', 'POST'])
def savetoServer():
    args = request.args
    url = args.get('url')
    response=requests.get(url)
    picb=response.content
    pic = Image.open(io.BytesIO(picb))
    #pic = Image.frombytes("L", (203, 203), picb)
    #pic = Image.open(io.StringIO(picb))
    pic.save("test.png")
    decoded_objects = pyzbar.decode(pic)
    for obj in decoded_objects:
        print("Type:", obj.type)
        print("Dat a:", obj.data)
        print()  

# Конечно же на выходе ничего не будет, но результат можно глянуть в отладчике :-)

    return ""
if __name__ == '__main__':
    app.run(debug=True)
Эта библиотека способна распознавать несколько кодов на одной картинке. Причем достаточно быстро.

Осталось только обработать результат, что наш талантливый читатель сделает самостоятельно.