Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2020, 20:11   #1
VolodyaBuzin
Пользователь
 
Регистрация: 10.11.2017
Сообщений: 56
По умолчанию Сканер штрих-кодов: поиск актуальной базы данных со штрихкодами товаров; проблемы с cv2.cv.CV_32F и параметром --image

Добрый вечер, форумчане! Я пишу сканер штрих-кодов по инструкциям на этом сайте:
https://habr.com/ru/company/enterra/blog/244163/
Я работаю с OpenCV 4.1.2, Python 3.7, Anaconda 2019 и PyCharm Community. В процессе реализации алгоритма я столкнулся с некоторыми проблемами.
Во-первых, подмодуль cv и константа CV_32F, которые используются в методе Собеля, были удалены в OpenCV 3.0. Я попробовал без подмодуля cv и получил ошибки, связанные с параметром --image. При этом пробная картинка лежит в папке с проектом, и путь к ней прописан. Какие аналоги есть у параметра --image и константы CV_32F в OpenCV 4.1.2 и Python 3.7?

Исходный код:
Код:
# import the necessary packages
import numpy as np
import argparse
import cv2
 
# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="5aa4dce1a6fd417e8b9df368d6c93842.jpg")
args = vars(ap.parse_args())
 
# load the image and convert it to grayscale
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
# compute the Scharr gradient magnitude representation of the images
# in both the x and y direction
gradX = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=-1)
gradY = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=0, dy=1, ksize=-1)
 
# subtract the y-gradient from the x-gradient
gradient = cv2.subtract(gradX, gradY)
gradient = cv2.convertScaleAbs(gradient)
 
# blur and threshold the image
blurred = cv2.blur(gradient, (9, 9))
(_, thresh) = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)
 
# construct a closing kernel and apply it to the thresholded image
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))
closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
 
# perform a series of erosions and dilations
closed = cv2.erode(closed, None, iterations = 4)
closed = cv2.dilate(closed, None, iterations = 4)
 
# find the contours in the thresholded image, then sort the contours
# by their area, keeping only the largest one
(cnts, _) = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL,
                             cv2.CHAIN_APPROX_SIMPLE)
c = sorted(cnts, key=cv2.contourArea, reverse=True)[0]
 
# compute the rotated bounding box of the largest contour
rect = cv2.minAreaRect(c)
box = np.int0(cv2.cv.BoxPoints(rect))
 
# draw a bounding box arounded the detected barcode and display the
# image
cv2.drawContours(image, [box], -1, (0, 255, 0), 3)
cv2.imshow("Image", image)
cv2.waitKey(0)
Ошибки:
Код:
D:\Python\python.exe C:/barcode_scaner/barcode_scaner.py
usage: barcode_scaner.py [-h] -i IMAGE
barcode_scaner.py: error: the following arguments are required: -i/--image
 
Process finished with exit code 2
Во-вторых, я хочу по цифрам на штрих-коде определить и вывести на экран информацию о товаре - его название, производителя, магазин и время его покупки, как в Едадиле. Самостоятельно я могу только создать в MySQL таблицу кодов разных стран, по таблице найти нужный код и вывести страну приобретения, а также проверить товар на подлинность, сверив хеш-сумму с последней цифрой. Где искать актуальные базы данных со штрих-кодами товаров на этот месяц и год, чтобы по ним вывести информацию о магазине, изготовителе, время покупки и название? С помощью каких библиотек и функций можно её прочитать в Python? Как подключиться к серверу Universe-HTT, чтобы отправить запрос с цифрами штрих-кода, а потом с помощью JSON считать данные о стране, названии, производителе и времени покупки?
Изображения
Тип файла: jpg 5aa4dce1a6fd417e8b9df368d6c93842.jpg (40.8 Кб, 15 просмотров)
Тип файла: jpg папка-проекта.jpg (39.6 Кб, 0 просмотров)
VolodyaBuzin вне форума Ответить с цитированием
Старый 07.02.2020, 20:13   #2
VolodyaBuzin
Пользователь
 
Регистрация: 10.11.2017
Сообщений: 56
По умолчанию

В-третьих, как определить область штрих-кода? Ведь я не знаю начальные координаты x0 и y0, известны только градиенты gradX и gradY, в которых лежит разность начальной и конечной координат. Я хочу обрезать картинку по области штрих-кода по иксу от x0 плюс/минус 1,5 до (x0 + gradX) плюс/минус 1,5 и точно также по игреку, создать отдельный файл, в котором пропишу функцию по извлечению и склейке цифрового кода, например, как здесь:
https://www.severcart.ru/blog/all/tesseract_ocr_python/

Код:
from PIL import Image
import pytesseract
import cv2
import os
 
image = '/tmp/tests.png'
 
preprocess = "thresh"
 
# загрузить образ и преобразовать его в оттенки серого
image = cv2.imread(image)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
# проверьте, следует ли применять пороговое значение для предварительной обработки изображения
 
if preprocess == "thresh":
    gray = cv2.threshold(gray, 0, 255,
        cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
 
# если нужно медианное размытие, чтобы удалить шум
elif preprocess == "blur":
    gray = cv2.medianBlur(gray, 3)
 
# сохраним временную картинку в оттенках серого, чтобы можно было применить к ней OCR
 
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)
 
# загрузка изображения в виде объекта image Pillow, применение OCR, а затем удаление временного файла
text = pytesseract.image_to_string(Image.open(filename))
os.remove(filename)
print(text)
 
# показать выходные изображения
cv2.imshow("Image", image)
cv2.imshow("Output", gray)
input(‘pause…’)
А потом подключить этот файл к основному и оттуда вызвать функцию по определению цифр, в которую передам обрезанную картинку по области штрих-кода. Как узнать координаты области штрих-кода плюс/минус 1,5, чтобы правильно обрезать картинку, а потом считать и склеить цифры под штрих-кодом с помощью библиотеки pytesseract?

И в-четвёртых, как в Python включить русскую раскладку наподобии сишной функции setlocale из <locale.h>, чтобы компилятор не вывел вместо кириллицы вопросительные знаки?
VolodyaBuzin вне форума Ответить с цитированием
Старый 08.02.2020, 13:36   #3
VolodyaBuzin
Пользователь
 
Регистрация: 10.11.2017
Сообщений: 56
По умолчанию

Попробовал код отсюда:
https://pysource.com/2019/02/28/scan...v-with-python/
Он даже вывел данные, но у меня остался тот же самый вопрос - как на их основе получить информацию о человеке, товаре или организации? Если это чек или товар, где взять базу данных магазинов и товаров или как и к какому серверу подключиться, чтобы вывести информацию о магазине и времени покупки, а также название товара, его стоимость и изготовителя? Если это визитка человека или организации - где взять базы данных известных личностей и организаций России и США или как подключиться к серверам с этими базами? Где взять файл barcode.csv из модулей argparse, datetime, imutils, time и cv2? В инструкциях написано:

Код:
.vscode/opencv-tmp/barcodes.csv
Но это для линуксов. Где искать папку opencv-tmp в Anaconda-2019 и PyCharm Community?

Исходный код:
Код:
import cv2
import numpy as np
import pyzbar.pyzbar as pyzbar
 
cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_PLAIN
 
while True:
    _, frame = cap.read()
 
    decodedObjects = pyzbar.decode(frame)
    for obj in decodedObjects:
        print("Data", obj.data)
        cv2.putText(frame, str(obj.data), (50, 50), font, 2,
                    (255, 0, 0), 3)
 
    cv2.imshow("Frame", frame)
 
    key = cv2.waitKey(1)
    if key == 27:
        break
Результат:
Код:
D:\Python\python.exe C:/barcode_scaner/barcode_scaner.py
Data b't=20200201T1743&s=100.00&fn=9284000100199295&i=143660&fp=1698079161&n=1'
Data b't=20200201T1743&s=100.00&fn=9284000100199295&i=143660&fp=1698079161&n=1'
Data b't=20200201T1743&s=100.00&fn=9284000100199295&i=143660&fp=1698079161&n=1'
Data b't=20200201T1743&s=100.00&fn=9284000100199295&i=143660&fp=1698079161&n=1'
Изображения
Тип файла: jpg результат-проекта.jpg (85.1 Кб, 0 просмотров)
VolodyaBuzin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сканер штрих-кодов USB Alexcrool Общие вопросы Delphi 3 09.07.2019 05:40
Сканер штрих-кодов и эксель Анурофф Microsoft Office Excel 3 10.08.2017 09:37
Сканер штрих кода и поиск Незнайка11 Microsoft Office Access 5 08.02.2014 20:34
сканер штрих-кодов через com порт Dmitriy90 C++ Builder 3 18.07.2012 15:35
Сканер штрих кодов asale Microsoft Office Excel 7 30.11.2008 19:57