Как записать декодированную матрицу данных в датафрейм - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь прочитать все матрицы данных из изображения и записать в dataframe. Я могу напечатать номер штрих-кода и местоположение через pylibdmtx, но я не могу понять, как сохранить в dataframe

image = cv2.imread('IMG-4951.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
plt.imshow(gray)
ret,thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
msg = pylibdmtx.decode(thresh)
print(msg)


Output:
[Decoded(data=b'01086995460155972150046789702417240229109LB02199', rect=Rect(left=984, top=1172, width=290, height=287)), Decoded(data=b'01086995460155972154702360250417240229109LB02199', rect=Rect(left=899, top=2242, width=279, height=272))]

переменную 'msg', сохраненную как список с 2 элементами в этом случае и когда я пытаюсь преобразовать пандСтолбец данных dataframe пустой, но столбец rect прямоугольный, как и выше. (Rect(left=984, top=1172, width=290, height=287))

Структура данных выглядит следующим образом:

data      rect
          Rect(left=984, top=1172, width=290, height=287)
          Rect(left=899, top=2242, width=279, height=272)

Как мне заполнить столбец данных или любой другой метод, который вы предлагаете?

Мой второй вопрос - эта библиотекакажется очень медленным любое предложение, как сделать это быстрее?

Заранее спасибо,

1 Ответ

1 голос
/ 18 октября 2019

Это может быть полезно

Я использовал этот тестовый образ

enter image description here

Импорт пакетов

import cv2
import matplotlib.pyplot as plt
from pylibdmtx.pylibdmtx import decode
import pandas as pd 

Используйте код, который вы указали выше

image = cv2.imread('datamatrix.png')
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
plt.imshow(gray)
ret,thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
msg = decode(thresh)
print(msg)

Я получаю этот вывод,

[Decoded(data=b'Stegosaurus', rect=Rect(left=5, top=6, width=96, height=95)), Decoded(data=b'Plesiosaurus', rect=Rect(left=298, top=6, width=95, height=95))]

enter image description here

Чтобы добавить к фрейму данныхЯ начинаю с заполнения списка, чтобы представить форму, которую я хотел бы, чтобы датафрейм был

ls_msg = []
for item in msg:
    ls_msg.append([item[0], item[1][0], item[1][1], item[1][2]])

Сделать список в фрейме данных

df_msg = pd.DataFrame(ls_msg)

Добавить имена столбцов

df_msg.columns = ['data', 'left','top','width']

Создает информационный фрейм, который выглядит следующим образом

enter image description here

Никогда не использовал этот пакет до того, как его было интересно устанавливать и играть!

...