Welcome to Raspberry Pi 5 repository
5. QR code
5. QR code
5. QR code5.1. Introduction to QR code5.2. Structure of QR code5.3. Characteristics of QR code5.4. QR code creation and recognition5.5. Precautions
5.1. Introduction to QR code
QR code is a type of two-dimensional barcode. QR comes from the abbreviation of "Quick Response" in English, which means quick response. It comes from the inventor's hope that the QR code can allow its content to be decoded quickly. QR code not only has large information capacity, high reliability and low cost, but can also represent various text information such as Chinese characters and images. It has strong confidentiality and anti-counterfeiting and is very convenient to use. What's more important is that the QR code technology is open source.
5.2. Structure of QR code
| Pictures | Analysis |
|---|---|
![]() | Positioning markings indicate the direction of the QR code. |
![]() | Alignment markings If the QR code is large, these additional elements help with positioning. |
![]() | Timing pattern Through these lines, the scanner can identify how big the matrix is. |
![]() | Version information (Version information) Here you specify the version number of the QR code being used. Currently, there are 40 different version numbers of QR codes. Version numbers used in the sales industry are usually 1-7. |
![]() | Format information (Format information) Format patterns contain information about fault tolerance and data masking patterns, and make scanning code easier. |
![]() | Data and error correction keys (Data and error correction keys) These modes save the actual data. |
![]() | Quiet zone (Quiet zone) This area is very important for the scanner. Its function is to separate itself from the surroundings. |
5.3. Characteristics of QR code
The data values in the QR code contain repeated information (redundant values). Therefore, even if up to 30% of the QR code structure is destroyed, the readability of the QR code is not affected. The storage space of the QR code is up to 7089 bits or 4296 characters, including punctuation marks and special characters, which can be written into the QR code. In addition to numbers and characters, words and phrases (such as web addresses) can also be encoded. As more data is added to the QR code, the code size increases and the code structure becomes more complex.
5.4. QR code creation and recognition
Source code path:/home/pi/yahboomcar_ws/src/yahboomcar_visual/simple_qrcode
Install
xxxxxxxxxxpython3 -m pip install qrcode pyzbarsudo apt-get install libzbar-dev
- create
Create qrcode object
xxxxxxxxxx''' Parameter meaning: version: an integer with a value from 1 to 40, controlling the size of the QR code (the minimum value is 1, which is a 12×12 matrix). If you want the program to determine this automatically, set the value to None and use the fit argument. error_correction: Controls the error correction function of the QR code. Possible values are the following 4 constants. ERROR_CORRECT_L: Approximately 7% or less of errors can be corrected. ERROR_CORRECT_M (default): About 15% or less of errors can be corrected. ROR_CORRECT_H: About 30% or less of errors can be corrected. box_size: Controls the number of pixels contained in each small grid in the QR code. border: Control the number of cells included in the border (the distance between the QR code and the image border) (the default is 4, which is the minimum value specified by relevant standards) ''' qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=5, border=4,)Add logo to qrcode QR code
xxxxxxxxxx # If the logo address exists, add the logo image my_file = Path(logo_path) if my_file.is_file(): img = add_logo(img, logo_path)Note: When using Chinese, Chinese characters need to be added
xxxxxxxxxxJust use python3 + py file to execute, then enter the content to be generated and press Enter to confirm.

- Identify
xxxxxxxxxxdef decodeDisplay(image, font_path): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # You need to convert the output Chinese characters into Unicode encoding first. barcodes = pyzbar.decode(gray) for barcode in barcodes: #Extract the position of the bounding box of the QR code (x, y, w, h) = barcode.rect # Draw the bounding box of the barcode in the image cv.rectangle(image, (x, y), (x + w, y + h), (225, 0, 0), 5) encoding = 'UTF-8' # To draw it, you need to convert it into a string first barcodeData = barcode.data.decode(encoding) barcodeType = barcode.type # Draw the data and types on the image pilimg = Image.fromarray(image) #Create brush draw = ImageDraw.Draw(pilimg) # Parameter 1: font file path, parameter 2: font size fontStyle = ImageFont.truetype(font_path, size=12, encoding=encoding) # Parameter 1: Print coordinates, Parameter 2: Text, Parameter 3: Font color, Parameter 4: Font draw.text((x, y - 25), str(barcode.data, encoding), fill=(255, 0, 0), font=fontStyle) # PIL image to cv2 image image = cv.cvtColor(np.array(pilimg), cv.COLOR_RGB2BGR) # Print barcode data and barcode type to the terminal print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData)) return image- Effect demonstration
xxxxxxxxxxJust use python3 + py file to execute(Parsing code, USB camera runs QRcode_Parsing_USB.py; CSI camera runs QRcode_Parsing_CSI.py)

5.5. Precautions
When running this routine and parsing the QR code operation, if you encounter the following error message:

The following operations need to be done
xxxxxxxxxxcd /home/pi/.local/lib/python3.11/site-packages/cv2/qt/plugins/platformsrm -rf libqxcb.so







