littlebot
Published on 2025-04-08 / 0 Visits
0

【源码】基于C语言和ZBar库的条码扫描系统

项目简介

本项目是基于C语言和ZBar库开发的条码扫描系统,可从视频流、图像文件等多种来源读取条形码。支持EAN - 13/UPC - A、UPC - E、EAN - 8、Code 128、Code 39、Interleaved 2 of 5和QR Code等多种条码类型。系统提供PC端和嵌入式端的编译与使用方法,代码结构清晰,便于理解、修改和维护。

项目的主要特性和功能

  1. 多平台支持:支持PC端和嵌入式端,可通过不同编译方式生成对应平台的zbar库。
  2. 多条码类型识别:能识别多种常见条码类型。
  3. 多种输出格式:支持默认格式、原始数据格式和XML格式输出。
  4. 可配置性:允许用户通过命令行参数配置解码器/扫描器设置。
  5. 实时扫描:利用ZBar库独立处理器,处理视频输入并实时扫描识别条形码。
  6. 图像文件处理:可从图像文件中读取解析条形码。
  7. 视频设备配置:支持视频设备配置。
  8. 提示音反馈:条形码识别后提供提示音反馈。

安装使用步骤

前提条件

假设用户已下载本项目的源码文件。

PC端使用步骤

  1. 编译zbar库
    • 命令行输入export CFLAGS=""
    • zbar_forked/目录下新建x64文件夹存放64位Linux计算机使用的zbar库。
    • zbar_forked/目录下执行命令(--prefix后的路径需为绝对路径,根据实际情况修改): bash ./configure --prefix=/Your/Path/zbar-0.10/x64/ --disable-video --without-imagemagick --without-qt --without-gtk --without-python --enable-video=no --without-x --without-jpeg
    • 执行make cleanmakemake install命令。
  2. 在应用程序中使用生成好的zbar库
    • x64目录下建立examples文件夹,并新建main.c文件,内容如下: ```c

include

include "../include/zbar.h"

define STB_IMAGE_WRITE_IMPLEMENTATION

include "stb_image_write.h"

define STB_IMAGE_IMPLEMENTATION

include "stb_image.h"

zbar_image_scanner_t *scanner = NULL;

int main(int argc, char const *argv[]) { if(argc < 2) { printf("usage: %s imageName\n", argv[0]); return(1); }

/* create a reader */
scanner = zbar_image_scanner_create();

/* configure the reader */
zbar_image_scanner_set_config(scanner, 0, ZBAR_CFG_ENABLE, 1);


/* load single channel image data */
const char *inputFile = argv[1];
int width = 0, height = 0, n = 0;
void *raw = NULL;
raw = stbi_load(inputFile, &width, &height, &n, 0);


/* wrap image data */
zbar_image_t *image = zbar_image_create();
zbar_image_set_format(image, *(int*)"GREY");
// zbar_image_set_format(image, *(int*)"Y800");
zbar_image_set_size(image, width, height);
zbar_image_set_data(image, raw, width * height, zbar_image_free_data);


/* scan the image for barcodes */
int num = zbar_scan_image(scanner, image);

/* extract results */
const zbar_symbol_t *symbol = zbar_image_first_symbol(image);
for(; symbol; symbol = zbar_symbol_next(symbol)) {
    /* do something useful with results */
    zbar_symbol_type_t typ = zbar_symbol_get_type(symbol);
    const char *results = zbar_symbol_get_data(symbol);
    printf("decoded %s symbol \"%s\"\n",zbar_get_symbol_name(typ), results);
}

/* clean up */
zbar_image_scanner_destroy(scanner);
stbi_image_free(raw);

return(0);

} - 编译程序: export LIBRARY_PATH=../lib/ gcc main.c -o decoder -lm -lzbar - 运行程序:在[这里](pic/)下载测试图片(单通道的png图片),运行以下命令: LD_LIBRARY_PATH=../lib/ ./decoder 01.png ```

嵌入式端使用步骤

  1. 配置工具链
    • 编辑~/.bashrc,添加以下内容(路径改为实际对应交叉工具链的路径): export PATH=/Your/Path/X1000/prebuilts/toolchains/mips-gcc472-glibc216/bin:$PATH export LD_LIBRARY_PATH=/Your/Path/X1000/prebuilts/toolchains/mips-gcc472-glibc216/lib
    • 使文件生效: source ~/.bashrc
    • 测试交叉工具链是否搭建成功:在任意目录下编辑hello.c文件,利用交叉工具链的gcc编译: mips-linux-gnu-gcc hello.c -o hello 若能生成可执行文件hello,则说明配置好交叉编译环境。
  2. 交叉编译生成库
    • 命令行输入export CFLAGS=""
    • zbar_forked/目录下新建mips文件夹存放嵌入式开发版使用的zbar库。
    • zbar_forked/目录下依次执行以下4条命令(--prefix后的路径需为绝对路径,根据实际情况修改): bash CROSS_COMPILE=mips-linux-gnu- CC=mips-linux-gnu-gcc export CROSS_COMPILE CC ./configure --prefix=/Your/Path/zbar/mips/ --without-imagemagick --without-qt --without-gtk --without-python --enable-video=no --without-x --without-jpeg --enable-pthread=no --host=mips --target=mips-linux
    • 执行make cleanmakemake install命令。
  3. 在开发版上调用库:可参考PC端库的调用方法。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】