Cara menggunakan webcam barcode scanner javascript

kali ini kita akan membuat sebuah fitur web dimana kita bisa mescan barcode dan menampilkannya di webnya memanfaatkan camera/webcam yang ada jadi tidak perlu alat khusus

kita akan menggunakan library js bernama zxing-js : //github.com/zxing-js/library

ok yang pertama kita buat struktur html dasar



    
    
    Scan QrCode


     
     

untuk bisa menampilkan preview webcam ke browser kita menggunakan tag video

lalu kita tambahkan linbrarynya

kita juga menambahkan library jquery agar lebih mudah nantinya

yang pertama kita deklarasikan beberapa vairable yang akan nanti kita gunakan

let selectedDeviceId = null;
const codeReader = new ZXing.BrowserMultiFormatReader[];
const sourceSelect = $["#pilihKamera"];

kemudian kita buat fungsi untuk inisiasi camera dan scannya

function initScanner[] {

//kode didalam fungsi

}

yang pertama kita akan mengambil id camera yang ada di perangkat kita bisa jadi nanti saat web di buka di hp kita bisa memilih kamera depan atau belakang

function initScanner[] {
    codeReader
    .listVideoInputDevices[]
    .then[videoInputDevices => {
        videoInputDevices.forEach[device =>
                    //list kamera yang tersedia [bisa di hapus]
            console.log[`${device.label}, ${device.deviceId}`]
        ];

        if[videoInputDevices.length > 0]{
            //cek jika kamera id tidak null
            if[selectedDeviceId == null]{
                            
                //memebrikan nilai kamera yang dipilih secara default
                if[videoInputDevices.length > 1]{
                    selectedDeviceId = videoInputDevices[1].deviceId
                } else {
                    selectedDeviceId = videoInputDevices[0].deviceId
                }
            }

                    
            //menampilkan list kamera yang ada ke list select option jadi nanti kita bisa memilih kameranya nanti
            if [videoInputDevices.length >= 1] {
                sourceSelect.html[''];
                videoInputDevices.forEach[[element] => {
                    const sourceOption = document.createElement['option']
                    sourceOption.text = element.label
                    sourceOption.value = element.deviceId
                    if[element.deviceId == selectedDeviceId]{
                        sourceOption.selected = 'selected';
                    }
                    sourceSelect.append[sourceOption]
                }]

            }
            



        } else {
            alert["Camera not found!"]
        }
    }]
    .catch[err => console.error[err]];
}

lalu kita coba panggil fungsinya,tapi sebelumnya kita check apakah browser kita memiliki akses kamera atau tidak

if [navigator.mediaDevices] {
    
    initScanner[]
  

} else {
    alert['kamera tidak bisa di akses.'];
}

NOTE : akses kamera kadang tidak di ijinkan di localhost keculai jika sudah menggunakan https

jika kita akses maka akan muncul list device kamera yang tersedia

kemudian kita akan menampilkan preview kamera dan proses scannya

codeReader
    .decodeOnceFromVideoDevice[selectedDeviceId, 'previewKamera']
    .then[result => {

            //hasil scan
            console.log[result.text]
            $["#hasilscan"].val[result.text];
        
            if[codeReader]{
//menghentikan kamera dan proses scan
                codeReader.reset[]
            }
    }]
    .catch[err => console.error[err]];

sehingga keseluruhan kode javascriptnya menjadi seperti ini

let selectedDeviceId = null;
const codeReader = new ZXing.BrowserMultiFormatReader[];
const sourceSelect = $["#pilihKamera"];

$[document].on['change','#pilihKamera',function[]{
    selectedDeviceId = $[this].val[];
    if[codeReader]{
        codeReader.reset[]
        initScanner[]
    }
}]

function initScanner[] {
    codeReader
    .listVideoInputDevices[]
    .then[videoInputDevices => {
        videoInputDevices.forEach[device =>
            console.log[`${device.label}, ${device.deviceId}`]
        ];

        if[videoInputDevices.length > 0]{
            
            if[selectedDeviceId == null]{
                if[videoInputDevices.length > 1]{
                    selectedDeviceId = videoInputDevices[1].deviceId
                } else {
                    selectedDeviceId = videoInputDevices[0].deviceId
                }
            }
            
            
            if [videoInputDevices.length >= 1] {
                sourceSelect.html[''];
                videoInputDevices.forEach[[element] => {
                    const sourceOption = document.createElement['option']
                    sourceOption.text = element.label
                    sourceOption.value = element.deviceId
                    if[element.deviceId == selectedDeviceId]{
                        sourceOption.selected = 'selected';
                    }
                    sourceSelect.append[sourceOption]
                }]
        
            }

            codeReader
                .decodeOnceFromVideoDevice[selectedDeviceId, 'previewKamera']
                .then[result => {

                        //hasil scan
                        console.log[result.text]
                        $["#hasilscan"].val[result.text];
                    
                        if[codeReader]{
                            codeReader.reset[]
                        }
                }]
                .catch[err => console.error[err]];
            
        } else {
            alert["Camera not found!"]
        }
    }]
    .catch[err => console.error[err]];
}


if [navigator.mediaDevices] {
    

    initScanner[]
    

} else {
    alert['Cannot access camera.'];
}

jika sudah coba jalankan lagi,dan juga siapkan qrcode yang akan di scan

jika berhasil maka otomatis kamera akan tertutup dan menampilkan hasil scannya di inputan

jika kalian memilki banyak device kamera kalian bisa memilih kamera mana yang akan di gunakan di bagian select optionnya lalu kamera akan terbuka lagi/terreset

kode lengkapnya



    
    
    Scan QrCode


     
     

let selectedDeviceId = null; const codeReader = new ZXing.BrowserMultiFormatReader[]; const sourceSelect = $["#pilihKamera"]; $[document].on['change','#pilihKamera',function[]{ selectedDeviceId = $[this].val[]; if[codeReader]{ codeReader.reset[] initScanner[] } }] function initScanner[] { codeReader .listVideoInputDevices[] .then[videoInputDevices => { videoInputDevices.forEach[device => console.log[`${device.label}, ${device.deviceId}`] ]; if[videoInputDevices.length > 0]{ if[selectedDeviceId == null]{ if[videoInputDevices.length > 1]{ selectedDeviceId = videoInputDevices[1].deviceId } else { selectedDeviceId = videoInputDevices[0].deviceId } } if [videoInputDevices.length >= 1] { sourceSelect.html['']; videoInputDevices.forEach[[element] => { const sourceOption = document.createElement['option'] sourceOption.text = element.label sourceOption.value = element.deviceId if[element.deviceId == selectedDeviceId]{ sourceOption.selected = 'selected'; } sourceSelect.append[sourceOption] }] } codeReader .decodeOnceFromVideoDevice[selectedDeviceId, 'previewKamera'] .then[result => { //hasil scan console.log[result.text] $["#hasilscan"].val[result.text]; if[codeReader]{ codeReader.reset[] } }] .catch[err => console.error[err]]; } else { alert["Camera not found!"] } }] .catch[err => console.error[err]]; } if [navigator.mediaDevices] { initScanner[] } else { alert['Cannot access camera.']; }

Bài mới nhất

Chủ Đề