项目简介
本项目是基于C语言和ZBar库开发的条码扫描系统,可从视频流、图像文件等多种来源读取条形码。支持EAN - 13/UPC - A、UPC - E、EAN - 8、Code 128、Code 39、Interleaved 2 of 5和QR Code等多种条码类型。系统提供PC端和嵌入式端的编译与使用方法,代码结构清晰,便于理解、修改和维护。
项目的主要特性和功能
- 多平台支持:支持PC端和嵌入式端,可通过不同编译方式生成对应平台的zbar库。
- 多条码类型识别:能识别多种常见条码类型。
- 多种输出格式:支持默认格式、原始数据格式和XML格式输出。
- 可配置性:允许用户通过命令行参数配置解码器/扫描器设置。
- 实时扫描:利用ZBar库独立处理器,处理视频输入并实时扫描识别条形码。
- 图像文件处理:可从图像文件中读取解析条形码。
- 视频设备配置:支持视频设备配置。
- 提示音反馈:条形码识别后提供提示音反馈。
安装使用步骤
前提条件
假设用户已下载本项目的源码文件。
PC端使用步骤
- 编译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 clean
、make
和make install
命令。
- 命令行输入
- 在应用程序中使用生成好的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
```
嵌入式端使用步骤
- 配置工具链
- 编辑
~/.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
,则说明配置好交叉编译环境。
- 编辑
- 交叉编译生成库
- 命令行输入
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 clean
、make
和make install
命令。
- 命令行输入
- 在开发版上调用库:可参考PC端库的调用方法。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】