2016-06-29 13 views
1

My QR code이 zbar

를 사용하여 QR 코드를 스캔 할 수 없습니다 "[]"Zbar는 QR을 읽을 할수 없어 것을 의미 출력으로 ... 뭔가 문제가 내 이미지 형식? 왜 이것이 작동하지 않는지도 모르겠습니다.

내 코드 :

import numpy as np 
import cv2 
import zbar 
import sys 

class ImageSource(object): 
    def __init__(self,source): 
     self.is_camera = type(source)==int 
     if self.is_camera: 
      self.source = cv2.VideoCapture(source) 
     else: 
      self.source = cv2.imread(source,1) 

    def get_size(self): 
     if self.is_camera: 
      return (int(self.source.get(3)),int(self.source.get(4))) 
     else: 
      return (self.source.shape[1],self.source.shape[0]) 

    def get_next(self): 
     if self.is_camera: 
      return self.source.read()[1] 
     else: 
      return self.source 

    def release(self): 
     if self.is_camera: 
      self.source.release() 

class QRScanner(object): 
    def __init__(self, width, height): 
     self.scanner = zbar.ImageScanner() 
     self.scanner.parse_config('enable') 
     self.width = width 
     self.height = height 

    def get_qrcodes(self, image): 
     zbar_img = self.cv2_to_zbar_image(image) 
     self.scanner.scan(zbar_img) 
     result=[] 
     for symbol in zbar_img: 
      if symbol.type!=zbar.Symbol.QRCODE: continue 
      fixed_data = symbol.data.decode("utf8").encode("shift_jis").decode("utf8") 

      result.append(QRCode(fixed_data,symbol.location)) 
     del(zbar_img) 
     return result 

    def cv2_to_zbar_image(self, cv2_image): 
     return zbar.Image(self.width, self.height, 'Y800',cv2_image.tostring()) 


cap = ImageSource("1.png") 
frame = cap.get_next() 
scanner = QRScanner(cap.get_size()[0],cap.get_size()[1]) 
print scanner.get_qrcodes(frame) 

답변

0

실제 문제가 무엇인지,하지만 대신 CV2의이 작업을 사용하여 필 (또는 베개)를 얻을 수 있었다 없습니다. 또한

import cv2 
import Image 
import zbar 
import sys 

class ImageSource(object): 
    def __init__(self,source): 
     self.is_camera = type(source)==int 
     if self.is_camera: 
      self.source = cv2.VideoCapture(source) 
     else: 
      self.source = cv2.imread(source,1) 

    def get_size(self): 
     if self.is_camera: 
      return (int(self.source.get(3)),int(self.source.get(4))) 
     else: 
      return (self.source.shape[1],self.source.shape[0]) 

    def get_next(self): 
     if self.is_camera: 
      return self.source.read()[1] 
     else: 
      return self.source 

    def release(self): 
     if self.is_camera: 
      self.source.release() 

class QRScanner(object): 
    def __init__(self, width, height): 
     self.scanner = zbar.ImageScanner() 
     self.scanner.parse_config('enable') 
     self.width = width 
     self.height = height 

    def get_qrcodes(self, image): 
     zbar_img = self.cv2_to_zbar_image(image) 
     self.scanner.scan(zbar_img) 
     result=[] 
     for symbol in zbar_img: 
      if symbol.type!=zbar.Symbol.QRCODE: continue 
      fixed_data = symbol.data.decode("utf8").encode("shift_jis").decode("utf8") 

      result.append((fixed_data,symbol.location)) 
     del(zbar_img) 
     return result 

    def cv2_to_zbar_image(self, cv2_image): 
     return zbar.Image(self.width, self.height, 'Y800',cv2_image.tostring()) 

pil = Image.open(sys.argv[1]).convert('L') 
width, height = pil.size 
scanner = QRScanner(width,height) 
print scanner.get_qrcodes(pil) 

이 여기에 내가 시도하는 모든 QR 코드로 작동하지만하지 않았다 작업했던 하나 :

http://media.techtarget.com/rms/misc/qr_code_barcode.jpg 

working qr code for above

+0

감사합니다,하지만 미안 비디오 스트림 작업 , 그래서 이것을 cv2 – abea

+0

@abea로 고쳐야합니다. 그럴만 한 것이지만, 아마도 Pil (저)와 함께 작동하는 QR로 먼저 시도해보십시오. 그래서 결과를 얻어야합니다. 나는 "QR 이미지 샘플"로 인터넷 검색을 통해 발견 된 몇 개의 이미지를 가지고 시험해 보았고 첫 2 또는 3은 전혀 작동하지 않았다. – sberry