Что нового

Декодер QR кода

unsend

Новичок
Сообщения
27
Репутация
2
Народ - может кто занимался этой проблемой - необходимо распознать QR код в bmp файле. Тобишь есть некое количество фалов в которых в одном и том же месте будет присутствовать QR код впечатанный туда прорамно(тобишь без наклонов и изгибов как при фотографии) в котором содержится инфа куда положить фаил - а ля c:\dir\file.bmp.
Засада в том что все найденное мной по QR либо только генерирует, либо уже интеггрировано в какието проги а хотелось бы чтобы была либо dll которую можно подключить либо чтото в этом роде. Можно самому написать конечно, но на автоите сам обработчик писать дело не эфективное - слишком медленно обрабатывать будет, а все остальное я уже лет как 15 не видел в глаза - дольше вспоминать буду. Вобщем надо чтото типа такого:
$return = DllCall("quricol32.dll","HANDLE", "GetHBitmap", "str", "Что-нибудь","int",4,"int",2)
Только в обратную сторону)))) quricol к сожелению ток генерит на сколько я понял, а надо распознать. Притом не нужно никаких отладок углового скана - в условии код будет 100% горизонтально и черным на белом без изгибов и искажений.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
unsend сказал(а):
...но на автоите сам обработчик писать дело не эфективное - слишком медленно обрабатывать будет...

Это почему же? Если битмап ровный и без масштабирования, то определить шаг сетки не составит особого труда.


Добавлено:
Сообщение автоматически объединено:

А вообще, плохо искали. По фразе "QR-код командная строка" в Google на первом месте. 5 мин. на чтение документации + 2 мин. на написание кода и вуаля...

Код:
#Include <Constants.au3>

Global Const $Path = @ProgramFilesDir & '\ZBar\bin\zbarimg.exe'
Global Const $QR = @ScriptDir & '\QR.png'

Global $Str = '', $Err = ''

If Not FileExists($Path) Then
	MsgBox(16, 'Error', 'zbarimg.exe not found.')
	Exit
EndIf

$PID = Run($Path & ' "' & $QR & '"', '', @SW_HIDE, BitOR($STDOUT_CHILD, $STDERR_CHILD))

While 1
    $Str &= StdoutRead($PID)
    If @error Then
		ExitLoop
	EndIf
WEnd

While 1
    $Err &= StderrRead($PID)
    If @error Then
		ExitLoop
	EndIf
WEnd

If $Str Then
	MsgBox(64, 'ZBar', BinaryToString(StringToBinary(StringReplace($Str, 'QR-Code:', '', 1), 1), 4))
Else
	MsgBox(16, 'ZBar', $Err)
EndIf


Только перед использованием установите ZBar Bar Code Reader.



Добавлено:
Сообщение автоматически объединено:

По поводу DLL. Есть такая штука "QRCode Decoder SDK/LIB" + документация.



Добавлено:
Сообщение автоматически объединено:

Вот на основе QRCode Decoder SDK/LIB, но там в пробной версии могут подменяться один или несколько символов на "*". Хотя у меня была подмена только первого символа в каждом пятом случае.

Код:
#Include <WinAPIEx.au3>

$hDll = DllOpen('QRCodeDecodeDll.dll')
$Ret = DllCall($hDll, 'ptr', 'QRCodeDecodeImageFile', 'str', @ScriptDir & '\QR.png', 'int*', 0)
If $Ret[0] Then
	MsgBox(32, '', BinaryToString(StringToBinary(_WinAPI_GetString(DllStructGetData(DllStructCreate('ptr', $Ret[0]), 1), 0), 1), 4))
	DllCall($hDll, 'none', 'QRCodeFree', 'ptr', $Ret[0], 'int', $Ret[2])
Else
	MsgBox(16, '', 'Error!')
EndIf
DllClose($hDll)
 
Автор
U

unsend

Новичок
Сообщения
27
Репутация
2
)))
Агромный респект и уважуха))))
Посиб большой - честно говоря думал что врядли чегонить пост даст)) Я просто автоитом хреновато пользуюсь пока - у меня такая необходимость выползает раз в 100 лет - в основном работаю с соляркой - винда так - ток по необходимости)))
А уж прорамированием я лет 10-15 не занимался серьезно - подтупливаю пока - времена когда асемблеровые вставки делал в уме за 5 мин прошли безразвратно))
Вобщем еще раз огромный пасиб за помощь) Докропаю - выложу всю софтину - фишка оч полезная кому-нить в итоге может получится)
 
Автор
U

unsend

Новичок
Сообщения
27
Репутация
2
Коли уж взялись помочь - можно еще раз пристать) Скрипт на базе первого примера виснет после 1-3 минут работы:(
Разместил в вопросах по гуи - потому что есть подозрение что проблема в нем именно. Хотя если честно вообще на багу смахивает автоита...
http://autoit-script.ru/index.php/topic,11021.new.html#new
 
Верх