วิธีอ่านรหัส QR หลายอันจากภาพเดียวโดยใช้ไลบรารี zxing

ขณะนี้ฉันกำลังพัฒนาเครื่องสแกนที่อ่านรหัส QR หลายรหัสที่พบในภาพเดียว ฉันจัดการเพื่ออ่านโค้ด QR ในภาพได้ แต่กลับให้ผลลัพธ์ที่ไม่สอดคล้องกัน สมมติว่ามีรหัส QR 4 รหัสในภาพ บางครั้งฉันสามารถอ่านได้ 2 และบางครั้ง 3 หรือเพียง 1 ซึ่งแตกต่างจากสแกนเนอร์ดั้งเดิม (ZXing Scanner) ที่ถอดรหัสอย่างรวดเร็ว ในกรณีของฉัน ฉันต้องทำให้แน่ใจว่ามีแสงเพียงพอและภาพไม่เบลอเพื่อถอดรหัส

ฉันใช้ QRCodeMultiReader เพื่อถอดรหัสภาพ ขณะนี้ใช้ ZXing Library เพื่อสร้างแอปพลิเคชัน

ด้านล่างนี้เป็นตัวอย่างโค้ดของฉัน:

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);
}

person She Smile GM    schedule 27.02.2013    source แหล่งที่มา
comment
คุณพบวิธีแก้ปัญหาที่สมบูรณ์แบบในการอ่านบาร์โค้ดหลาย ๆ อันแล้วหรือยัง?/   -  person Ando Masahashi    schedule 23.06.2014
comment
น่าเสียดายที่ฉันทำไม่ได้เพราะเราหยุดการพัฒนาฟีเจอร์นั้น แต่จะหาทางแก้ไขต่อไปโดยเฉพาะเมื่อฉันกลับมาเป็น Android   -  person She Smile GM    schedule 24.06.2014
comment
ตกลง คุณช่วยแบ่งปันรหัสสิ่งที่คุณเคยลองมาก่อนให้ฉันได้ไหม   -  person Ando Masahashi    schedule 24.06.2014
comment
ฉันเพิ่งใช้ไลบรารี zxing และตั้งค่าโค้ดสำหรับกล้อง ฉันเพิ่งทำตามบทช่วยสอนของ Android ในการตั้งค่ามุมมองกล้องในกิจกรรมหลัก ฉันไม่มีสำเนาของโค้ดการทำงานในขณะนี้ เนื่องจากฉันไม่ได้เชื่อมต่อกับลูกค้าที่ขอให้ฉันทำฟีเจอร์นี้อีกต่อไป ฉันไม่เก็บรหัสเนื่องจากลูกค้าเป็นเจ้าของอยู่แล้ว   -  person She Smile GM    schedule 25.06.2014
comment
@SheSmileGM โปรดช่วยฉันด้วย ฉันกำลังมองหาสิ่งเดียวกัน แต่ในกรณีของฉัน การอ่านโค้ด QR เพียงครั้งเดียวก็ใช้ได้ เนื่องจากโค้ดทั้งหมดเหมือนกัน โปรดลองให้คำตอบฉันที่นี่: stackoverflow.com/questions/30767188/   -  person sam_k    schedule 12.06.2015
comment
คุณควรจะสามารถใช้เมธอด getResultPoints() จากผลลัพธ์ที่มีอยู่เพื่อค้นหาตำแหน่งภายในรูปภาพต้นฉบับของการจับคู่ และใช้สิ่งนั้นเพื่อลบพื้นที่นั้นของรูปภาพ จากนั้นคุณสามารถทำซ้ำขั้นตอนการถอดรหัสจนกว่าจะไม่พบผลลัพธ์อีกต่อไป   -  person Logan Pickup    schedule 01.08.2016


คำตอบ (2)


ฉันได้สร้างแอปหนึ่งสำหรับกล้องถ่ายรูป ฉันใช้ intent เนื่องจากแอปกล้องถ่ายรูปเริ่มต้นจะมีอยู่ในระบบปฏิบัติการ Andriod ทุกเครื่อง และโดยทั่วไปแอปเหล่านี้ได้รับการปรับให้เหมาะกับอุปกรณ์นั้นได้ดีกว่าการเขียนแอปกล้องทั่วไปซึ่งจะปรับให้เหมาะกับโทรศัพท์ของคุณเท่านั้น...ดังนั้นสำหรับ กล้องดีกว่าใช้ intent

สำหรับการแยก QR หลายรายการจากรูปภาพเดียว ฉันลองใช้โค้ดด้านล่าง
แต่ผลลัพธ์ไม่สอดคล้องกันในบางครั้งฉันได้ 1 หรือ 2 หรือ 3 จาก 4 บางครั้งไม่มีเลย....มันไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบ

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());
        }
    }
person user2801456    schedule 21.09.2013

สวัสดี โปรดตรวจสอบในแอปเครื่องสแกนบาร์โค้ด Zxing ซึ่งมีตัวเลือกในการตั้งค่าเพื่อสแกนบาร์โค้ดจำนวนมาก เพื่อให้คุณเปิดใช้งานและตรวจสอบว่าคุณสามารถอ่านรหัส QR หลายรหัสพร้อมกันจากรูปภาพหนึ่งภาพขึ้นไป และตรวจสอบซอร์สโค้ดของไลบรารี Zxing ให้เป็นที่รู้จัก ข้อมูลรายละเอียด

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

person androidgeek    schedule 27.02.2013
comment
ไม่ได้สังเกตว่าฉันสามารถเปลี่ยนการตั้งค่าเพื่อสแกนหลายรหัสในเครื่องสแกน zxing ได้ ขอบคุณสำหรับสิ่งนั้น จะดีบักซอร์สโค้ดเครื่องสแกน zxing อีกครั้ง - person She Smile GM; 27.02.2013
comment
การสแกนจำนวนมากไม่เกี่ยวข้องกับการอ่านบาร์โค้ดหลายอันในคราวเดียว แต่เป็นการอ่านบาร์โค้ดหลายอันติดต่อกัน ไม่มีตัวเลือกในแอปที่จะสแกนบาร์โค้ดหลายอันในคราวเดียว แต่มีอยู่ในห้องสมุด - person Sean Owen; 27.02.2013
comment
@SeanOwen ใช่ ตัวเลือกเดียวในแอปคืออ่านบาร์โค้ดหลายอันติดต่อกัน แต่ไม่ได้อ่านพร้อมกัน แต่ในไลบรารี ผลลัพธ์ไม่สอดคล้องกัน มีข้อเสนอแนะเกี่ยวกับวิธีการรับภาพจากกล้องเพราะในส่วนของฉัน ฉันใช้ camera.takePicture(null,null,mPicture) เพื่อให้ได้ภาพ การดีบักไลบรารี zxing เป็นเรื่องที่ท้าทายเล็กน้อย สิ่งที่ฉันสังเกตเห็นคือมี resultpointcallbacks ฉันไม่แน่ใจว่ามันทำงานอย่างไร หรือจะหามันมาได้อย่างไร หรือมีไว้เพื่ออะไร - person She Smile GM; 28.02.2013