2013-02-27 43 views
10

Tôi hiện đang phát triển một máy quét đọc nhiều mã QR được tìm thấy trong một hình ảnh. Tôi quản lý để đọc mã QR trong hình ảnh nhưng nó cho tôi kết quả không phù hợp. Giả sử có 4 mã QR trong hình ảnh, đôi khi tôi có thể đọc 2 và đôi khi 3 hoặc chỉ 1. Không giống như trong máy quét gốc (ZXing Scanner) nó giải mã nhanh. Trong trường hợp của tôi, tôi phải đảm bảo có đủ ánh sáng và hình ảnh không bị mờ để giải mã nó.Cách đọc nhiều mã qr từ một hình ảnh bằng thư viện zxing

Tôi đang sử dụng QRCodeMultiReader để giải mã hình ảnh. Hiện đang sử dụng ZXing Thư viện để tạo ứng dụng.

Dưới đây là đoạn mã của tôi:

public void onPictureTaken(byte[] data, Camera camera) { 
    BitmapFactory.Options opt = new BitmapFactory.Options(); 
    opt.inMutable = true; 
    Bitmap bitmap = BitmapFactory 
      .decodeByteArray(data, 0, data.length, opt); 
    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); 
    hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); 
    LuminanceSource source = new RGBLuminanceSource(bitmap); 

    QRCodeMultiReader multiReader = new QRCodeMultiReader(); 
    Result[] results = multiReader.decodeMultiple(new BinaryBitmap(
    new HybridBinarizer(source)), hints); 
} 
+1

có bạn tìm thấy bất kỳ giải pháp hoàn hảo để đọc nhiều mã vạch?/ –

+0

may Tôi đã không vì chúng tôi ngừng phát triển cho tính năng đó. Nhưng sẽ tiếp tục tìm kiếm giải pháp cho điều này đặc biệt là tôi trở lại trong Android. –

+0

ok bạn có thể chia sẻ cho tôi mã những gì bạn đã thử trước đây không? –

Trả lời

0

Xin chào xin vui lòng kiểm tra trong ứng dụng mã vạch ZXing Scanner nó có tùy chọn trong Settings để quét mã vạch hàng loạt nên u kích hoạt nó và kiểm tra xem nó u có thể đọc Nhiều mã QR tại một thời điểm từ một hoặc nhiều Hình ảnh và cũng kiểm tra mã nguồn của thư viện Zxing để biết Thông tin chi tiết.

https://code.google.com/p/zxing/

+0

không nhận thấy rằng tôi có thể thay đổi cài đặt để quét nhiều mã trong máy quét zxing, nhờ đó. Sẽ gỡ lỗi lại mã nguồn máy quét zxing. –

+1

Quét hàng loạt không liên quan gì đến việc đọc nhiều mã vạch cùng một lúc, nhưng đọc nhiều mã vạch liên tiếp. Không có tùy chọn trong ứng dụng để quét một số mã vạch cùng một lúc, nhưng có trong thư viện. –

+0

@SeanOwen có, tùy chọn duy nhất trong ứng dụng đang đọc một số mã vạch liên tiếp, nhưng không đọc cùng một lúc. Nhưng trong thư viện, kết quả là không nhất quán, bất kỳ gợi ý nào về cách lấy hình ảnh từ camera coz trong phần cuối của tôi, tôi sử dụng 'camera.takePicture (null, null, mPicture)' để lấy nó. Đó là một chút khó khăn để gỡ lỗi thư viện zxing, những gì tôi nhận thấy là có một resultpointcallbacks, tôi không chắc chắn như thế nào nó hoạt động hoặc làm thế nào để có được nó hoặc những gì nó cho. –

0

tôi đã tạo ra một ứng dụng cho máy ảnh tôi đã sử dụng intent như các ứng dụng máy ảnh mặc định là có với tất cả các hệ điều hành Andriod và thường họ được tối ưu hóa tốt hơn cho thiết bị đó hơn là viết một ứng dụng máy ảnh chung chung mà sẽ được tối ưu hóa chỉ dành cho điện thoại của bạn ... để máy ảnh sử dụng tốt hơn intent.

Để trích xuất nhiều QR từ một hình ảnh tôi đã thử mã bên dưới.
Nhưng kết quả không phù hợp một thời gian tôi nhận được 1 hoặc 2 hoặc 3 trong số 4 một thời gian không .... giải pháp không hoàn hảo của nó

if(photo == null) 
     return; 
    Bitmap ScaledQr = null; 
    ScaledQr = Bitmap.createScaledBitmap(photo, 640,480, false); 
    BinaryBitmap Qr = BitMap2BinayBitmap(ScaledQr); 
    Result [] kpResultMulti = null; 
    Result kpResultSingle = null; 
    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); 
    hints.put(DecodeHintType.TRY_HARDER, true); 
    //hints.put(DecodeHintType.PURE_BARCODE, true); 

    try { 
     kpResultMulti = kpReaderArr.decodeMultiple(Qr,hints); 
    } catch (NotFoundException e) { 
     // TODO Auto-generated catch block 
     msbox("Exception","NotFoundException"); 
     e.printStackTrace(); 
    } 

    if(kpResultMulti != null){ 
     msbox("Total Result" ,kpResultMulti.length +"");// + photo.getWidth() +  "Height=" + photo.getHeight()); 
     for(Result kp : kpResultMulti) 
     { 

      msbox("Results",kp.getText()); 
     } 
    } 
Các vấn đề liên quan