2010
11
14
11
14
Webカメラを使ったバーコードスキャン on python

先日せっかくpythonにzbarを入れたので、pythonでWebカメラを使ったバーコードスキャンをやってみる。OpenCVとzbarを使う。
OpenCVがなければ……というより、Windows環境では下記がWebカメラからのキャプチャをするのにおすすめ。OpenCVは大きいから、Webカメラを使いたいだけなら不要なものが多い。
http://videocapture.sourceforge.net/
とっても簡単。まずOpenCVサンプルのfacedetect.pyの必要な部分以外削る。必要な部分とはWebカメラの使用準備とフレームキャプチャ。それでfacedetectの関数部分をバーコード検出に書き換えるだけ。
http://sourceforge.net/apps/mediawiki/zbar/index.php?title=HOWTO:_Scan_images_using_the_API#Python
次に↑に載っている画像ファイルからバーコード検出するスクリプトを参考に、
Webカメラからキャプチャした画像を解析するように適応させる。
#!/usr/bin/env python
import cv
import zbar
import Image
import time
def scanbar(img):
t=time.time()
#convert to grayscale
gray =cv.CreateImage( cv.GetSize(img),cv.IPL_DEPTH_8U,1)
cv.CvtColor(img, gray, cv.CV_BGR2GRAY)
# create a reader
scanner = zbar.ImageScanner()
# configure the reader
scanner.parse_config('enable')
# obtain image data
##pil = Image.open('barcode.png').convert('L')
width, height = gray.width, gray.height
raw = gray.tostring()
# wrap image data
image = zbar.Image(width, height, 'Y800', raw)
# scan the image for barcodes
scanner.scan(image)
# extract results
for symbol in image:
# do something useful with results
print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
cv.ShowImage("result", img)
print "%f" % (time.time()-t)
if __name__ == '__main__':
capture = cv.CreateCameraCapture(int(0))
cv.NamedWindow( "result", 1 )
frame=''
if capture:
while True:
frame = cv.QueryFrame(capture)
scanbar(frame)
if cv.WaitKey( 10 ) >= 0:
break
↓にC,C++,python,perlでの使い方が載っています。
HOWTO: Scan images using the API
スポンサーサイト