当前位置: 首页 > news >正文

东营网站建设铭盛信息wordpress完全静态

东营网站建设铭盛信息,wordpress完全静态,漯河网页设计,做视频网站侵权吗一、前言 本地摄像头的采集可以有多种方式#xff0c;一般本地摄像头会通过USB的方式连接#xff0c;在嵌入式上可能大部分是CMOS之类的软带的接口#xff0c;这些都统称本地摄像头#xff0c;和网络摄像头最大区别就是一个是通过网络来通信#xff0c;一个是直接本地通信…一、前言 本地摄像头的采集可以有多种方式一般本地摄像头会通过USB的方式连接在嵌入式上可能大部分是CMOS之类的软带的接口这些都统称本地摄像头和网络摄像头最大区别就是一个是通过网络来通信一个是直接本地通信。本地摄像机的采集可以用qcamera来做但是qcamera类在很多平台没有实现比如嵌入式linux系统上几乎是没有用的所以更加推荐用兼容性跨平台最好的ffmpeg来做在linux上当然也可以通过v4l2来实现这个其实是整个linux系统中通用的USB摄像头采集的框架无论是ffmpeg还是qcamera在linux系统上底层其他都是用v4l2来实现的所以如果在嵌入式板子受限于内存或者存储空间大小用不了ffmpeg一堆库这个时候就可以用最底层的v4l2来采集。 很多人的应用场景要求不止采集1路本地摄像头可能有多路都需要同时采集其实这个和程序没有太大关系能够采集一路肯定就能多路毕竟就是封装的一个类直接new出来就行要能采集多路最大的性能瓶颈在USB带宽数据带宽还有就是USB口子的供电足不足供电不足也只能采集1-2路比如有些人用的是USB集线器上面一排USB口子由于供电不足就算你插4个USB摄像头也只能最多采集2路带宽又限制了分辨率和帧率比如一个普通PC机器可以同时采集4路640x480分辨率但是由于带宽不足无法同时采集4路1080P尽管4个摄像头都支持1080p分辨率所以这是个综合因素的叠加影响遇到问题慢慢查。 这个摄像头综合应用陆陆续续完善了很多年最开始是v4l2版本只能用在嵌入式linux上而后从Qt5开始集成了qcamera类所以有用qcamera来做了一个版本现在Qt6在多媒体框架有了巨大的性能提升又用Qt6的qcamera做了个版本为什么不通用了因为Qt6的多媒体框架做了巨大更新调整完全不兼容之前的类。在做视频组件的实现用ffmpeg采集本地摄像头也实现了而且做的比较完善所以后面单独提炼出来做了ffmpeg的版本最后测试下来发现ffmpeg是最通用的在哪里都能正常采集。 做二维码采集这个功能用的是zxing类最初的做法是将采集的图片发给zxing解析实际过程发现大图片解析很慢比如1080P图片大概1s只能解析3张这个速度看起来就慢了点如果是2K的分辨率呢。后面经过一些真实场景应用包括菜鸟驿站里面带的扫描识别发现都有个放大区域用户可以设置一个关心的矩形区域要放在这个矩形区域内能够最大最快的识别这是个不错的策略在ffmpeg中通过设置crop裁剪区域就可以直接将对应内容放大显示然后采集的实时画面可以是原视频发送给zxing解析的就是裁剪后的画面这样速度大大提升。之前大图就算二维码在里面由于在整个图片中的占比区域太小也可能解析失败自动调整后裁剪区域性能大幅度提升完美解决。 二、效果图 三、体验地址 国内站点https://gitee.com/feiyangqingyun国际站点https://github.com/feiyangqingyun个人作品https://blog.csdn.net/feiyangqingyun/article/details/97565652体验地址https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码01jf 文件名bin_video_camera。 四、相关代码 #include frmzxing.h #include frmmain.h #include ui_frmzxing.h #include qthelper.h #include camerahelper.h #include widgethelper.h #include zxingthread.hfrmZxing::frmZxing(QWidget *parent) : QWidget(parent), ui(new Ui::frmZxing) {ui-setupUi(this);this-initForm();this-initConfig(); }frmZxing::~frmZxing() {delete ui; }void frmZxing::initForm() {ui-frame-setFixedWidth(AppData::RightWidth);//关联信号槽connect(ui-cameraWidget, SIGNAL(sig_receivePlayStart(int)), this, SLOT(receivePlayStart(int)));connect(ui-cameraWidget, SIGNAL(sig_receivePoint(int, QPoint)), this, SLOT(receivePoint(int, QPoint)));//实例化解析类并启动线程zxing new ZXingThread(this);connect(zxing, SIGNAL(receiveResult(QString, QString, int)), this, SLOT(receiveResult(QString, QString, int)));zxing-start();//启动定时器截图timer new QTimer(this);connect(timer, SIGNAL(timeout()), this, SLOT(on_btnSnap_clicked()));if (AppConfig::Zxing_Interval 0) {timer-start(AppConfig::Zxing_Interval);} }void frmZxing::initConfig() {CameraHelper::loadCameraCore(ui-cboxCameraCore, AppConfig::Zxing_CameraCore);connect(ui-cboxCameraCore, SIGNAL(currentIndexChanged(int)), this, SLOT(saveConfig()));this-cameraDeviceChanged();connect(ui-cboxCameraName-lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(saveConfig()));CameraHelper::loadVideoSize(ui-cboxVideoSize);ui-cboxVideoSize-lineEdit()-setText(AppConfig::Zxing_VideoSize);connect(ui-cboxVideoSize-lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(saveConfig()));CameraHelper::loadFrameRate(ui-cboxFrameRate);ui-cboxFrameRate-lineEdit()-setText(QString::number(AppConfig::Zxing_FrameRate));connect(ui-cboxFrameRate-lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(saveConfig()));ui-cboxVideoMode-setCurrentIndex(AppConfig::Zxing_VideoMode);connect(ui-cboxVideoMode, SIGNAL(currentIndexChanged(int)), this, SLOT(saveConfig()));zxing-setDecoder(AppConfig::Zxing_DecoderFormat);ui-cboxDecoderFormat-addItem(仅二维码);ui-cboxDecoderFormat-addItem(一维二维);ui-cboxDecoderFormat-addItem(所有格式);ui-cboxDecoderFormat-setCurrentIndex(AppConfig::Zxing_DecoderFormat);connect(ui-cboxDecoderFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(saveConfig()));ui-cboxInterval-addItem(暂停);ui-cboxInterval-addItem(300);ui-cboxInterval-addItem(500);ui-cboxInterval-addItem(800);ui-cboxInterval-addItem(1000);int index ui-cboxInterval-findText(QString::number(AppConfig::Zxing_Interval));ui-cboxInterval-setCurrentIndex(index 0 ? 0 : index);connect(ui-cboxInterval, SIGNAL(currentIndexChanged(int)), this, SLOT(saveConfig()));ui-txtTopLeft-setText(AppConfig::Zxing_TopLeft);connect(ui-txtTopLeft, SIGNAL(textChanged(QString)), this, SLOT(saveConfig()));ui-txtBottomRight-setText(AppConfig::Zxing_BottomRight);connect(ui-txtBottomRight, SIGNAL(textChanged(QString)), this, SLOT(saveConfig())); }void frmZxing::saveConfig() {//内核变了需要重新搜索设备int cameraCore ui-cboxCameraCore-itemData(ui-cboxCameraCore-currentIndex()).toInt();if (AppConfig::Zxing_CameraCore ! cameraCore) {AppConfig::Zxing_CameraCore cameraCore;this-cameraDeviceChanged();}//不为空才需要改变QString cameraName ui-cboxCameraName-currentText();if (!cameraName.isEmpty()) {AppConfig::Zxing_CameraName cameraName;}AppConfig::Zxing_VideoSize ui-cboxVideoSize-currentText();AppConfig::Zxing_FrameRate ui-cboxFrameRate-currentText().toInt();AppConfig::Zxing_VideoMode ui-cboxVideoMode-currentIndex();//变了立即重新设置int decoderFormat ui-cboxDecoderFormat-currentIndex();if (AppConfig::Zxing_DecoderFormat ! decoderFormat) {AppConfig::Zxing_DecoderFormat decoderFormat;zxing-setDecoder(AppConfig::Zxing_DecoderFormat);}int interval ui-cboxInterval-currentText().toInt();if (AppConfig::Zxing_Interval ! interval) {AppConfig::Zxing_Interval interval;if (interval 0) {timer-start(interval);} else {timer-stop();}}AppConfig::Zxing_TopLeft ui-txtTopLeft-text().trimmed();AppConfig::Zxing_BottomRight ui-txtBottomRight-text().trimmed();AppConfig::writeConfig(); }void frmZxing::initPara() {//设置显示窗体参数WidgetPara widgetPara ui-cameraWidget-getWidgetPara();widgetPara.borderWidth 1;widgetPara.videoMode (VideoMode)AppConfig::Zxing_VideoMode;ui-cameraWidget-setWidgetPara(widgetPara);//设置采集线程参数CameraPara cameraPara ui-cameraWidget-getCameraPara();cameraPara.cameraCore (CameraCore)AppConfig::Zxing_CameraCore;cameraPara.cameraName AppConfig::Zxing_CameraName;cameraPara.videoSize AppConfig::Zxing_VideoSize;cameraPara.frameRate AppConfig::Zxing_FrameRate;ui-cameraWidget-setCameraPara(cameraPara); }void frmZxing::append(int type, const QString data, bool clear) {static int maxCount 50;static int currentCount 0;QtHelper::appendMsg(ui-txtMain, type, data, maxCount, currentCount, clear);ui-txtMain-moveCursor(QTextCursor::End); }void frmZxing::createImage(const QString text) {if (!text.isEmpty()) {QImage image zxing-encodeData(text, QSize(250, 250));ui-labResult-setImage(image, true);} }void frmZxing::cameraDeviceChanged() {frmMain::getCameraInfo((CameraCore)AppConfig::Zxing_CameraCore);CameraHelper::loadCameraName(ui-cboxCameraName, AppConfig::Zxing_CameraName); }void frmZxing::snapImage(const QImage image, const QString snapName) {QImage img image;if (snapName ! file) {//有左上右下坐标说明需要裁减int w image.width();int h image.height();if (!AppConfig::Zxing_TopLeft.isEmpty() !AppConfig::Zxing_BottomRight.isEmpty()) {QRect rect WidgetHelper::getRect(AppConfig::Zxing_TopLeft, AppConfig::Zxing_BottomRight);img img.copy(rect);QString msg QString(执行裁剪(原分辨率: %1 x %2 新分辨率: %3 x %4)).arg(w).arg(h).arg(img.width()).arg(img.height());append(4, msg);img.save(f:/1.jpg, jpg);}//防止图片过大导致解析很慢static int maxWidth 1280;static int maxHeight 720;w img.width();h img.height();if (w maxWidth || h maxHeight) {img img.scaled(QSize(maxWidth, maxHeight), Qt::KeepAspectRatio);QString msg QString(执行缩放(原分辨率: %1 x %2 新分辨率: %3 x %4)).arg(w).arg(h).arg(maxWidth).arg(maxHeight);append(4, msg);}}//添加到线程中解析zxing-append(, img);//显示图片ui-labImage-setImage(img, true); }void frmZxing::receiveResult(const QString flag, const QString text, int time) {append(2, QString((用时: %1 毫秒) 结果: %2).arg(time).arg(text));ui-txtResult-setText(text);//重新生成新的二维码图片createImage(text); }void frmZxing::receivePlayStart(int time) {//如果存在裁剪区域则设置图形if (!AppConfig::Zxing_TopLeft.isEmpty() !AppConfig::Zxing_BottomRight.isEmpty()) {GraphInfo graph;graph.rect WidgetHelper::getRect(AppConfig::Zxing_TopLeft, AppConfig::Zxing_BottomRight);graph.borderWidth WidgetHelper::getBorderWidth(ui-cameraWidget);ui-cameraWidget-setGraph(graph);} }void frmZxing::receivePoint(int type, const QPoint point) {QString text QString(%1, %2).arg(point.x()).arg(point.y());if (ui-rbtnTopLeft-isChecked()) {ui-txtTopLeft-setText(text);} else {ui-txtBottomRight-setText(text);} }void frmZxing::on_btnPlay_clicked() {this-initPara();if (!ui-cameraWidget-init()) {return;}//关联采集线程信号槽CameraThread *cameraThread ui-cameraWidget-getCameraThread();connect(cameraThread, SIGNAL(cameraDeviceChanged()), this, SLOT(cameraDeviceChanged()));connect(cameraThread, SIGNAL(snapImage(QImage, QString)), this, SLOT(snapImage(QImage, QString)));ui-cameraWidget-play();ui-widget-setEnabled(false); }void frmZxing::on_btnStop_clicked() {ui-cameraWidget-stop();ui-widget-setEnabled(true); }void frmZxing::on_btnPause_clicked() {ui-cameraWidget-pause(); }void frmZxing::on_btnNext_clicked() {ui-cameraWidget-next(); }void frmZxing::on_btnSnap_clicked() {CameraThread *thread ui-cameraWidget-getCameraThread();if (thread thread-getIsOk()) {append(4, 执行截图并解析二维码);ui-cameraWidget-snap();} }void frmZxing::on_btnFile_clicked() {QString fileName QFileDialog::getOpenFileName(this, 打开, , *.jpg *.png);if (!fileName.isEmpty()) {QImage image(fileName);snapImage(image, file);} }void frmZxing::on_btnCreate_clicked() {createImage(ui-txtResult-text()); }五、功能特点 同时支持 qcamera、ffmpeg、v4l2 三种内核解析本地摄像头。提供函数 findCamera 自动搜索环境中的所有本地摄像头设备搜索结果信号发出。支持自动搜索和指定设备两种模式自动搜索模式下会将搜索到的第一个设备作为当前设备打开。支持同时打开多路设备亲测4路受限于具体的环境比如带宽。支持自动重连默认开启失败后会自动重新搜索和尝试打开。ffmpeg方案、v4l2方案都支持回调模式采集后转成QImage绘制和句柄模式采集后YUV数据GPU绘制性能高。视频显示位置自动调整算法当视频分辨率超过显示控件大小则等比例缩放居中显示不超过则原尺寸居中显示还可设置拉伸填充显示。自动调整、等比例缩放、拉伸填充。可选不同的分辨率来打开摄像头支持 160x120、320x240、640x480、800x600、1280x720、1280x960、1920x1080 等。可选不同的帧率来打开摄像头支持 0采用默认值、5、、10、15、20、25、30 等。支持抓拍截图传入文件名则自动保存截图文件不传入则将图片数据QImage信号发出。提供函数接口 开始播放play、停止播放stop、暂停播放pause、继续播放next。支持动态热插拔加载包括自动读取所有设备名称到下拉框。支持录像文件存储提供开始录像recordStart、暂停录像recordPause、停止录像recordStop 等函数。提供二维码示例自动采集画面识别二维码支持自动将识别到的二维码重新生成大图。二维码识别支持设置热点区域对该区域内的图片进行裁切并识别在大分辨率图像采集的时候非常有用提升速度和效率。支持选择图片文件解析二维码手动输入文本内容生成二维码。提供图片传输示例自动将打开的摄像头视频实时传输出去服务器端接收后解析显示。此方案可以作为将本地的摄像头实时画面远程传输比如嵌入式板子上的摄像头画面传输到PC端显示。支持等比例拉伸填充显示画面宽高小于显示控件的宽高则以原视频大小为准大于则按照显示控件的尺寸等比例缩放居中。视频控件悬浮条自带开始和停止录像切换、声音静音切换、抓拍截图、关闭视频等功能。音频组件支持声音波形值数据解析可以根据该值绘制波形曲线和柱状声音条默认提供了声音振幅信号。代码框架和结构优化到极致性能彪悍持续迭代更新升级。源码支持Qt4、Qt5、Qt6兼容所有版本。
http://www.zqtcl.cn/news/331144/

相关文章:

  • 肇庆网站建设方案维护做学校网站素材图片素材
  • 新潮远网站建设建什么类型个人网站
  • 泉州中小企业网站制作洛浦县网站建设
  • 做游戏视频网站用什么程序好wordpress 地址修改
  • 大连的网站建设阳西网站seo
  • 网站制作电话多少网站商品图片怎么做
  • 定制做网站平台网站什么情况要更新
  • 上海网站建设哪家国外有哪些网站可以做电商
  • 网络软文推广网站wordpress仿站抓取软件
  • 安徽圣力建设集团网站当当网站建设与易趣网站对比
  • 长沙网站设计制作DW做注册网站
  • 商城设计网站关键词的优化在哪做
  • 网站锚文本网络营销的解释
  • 苏州专业网站建设网站模板是什么
  • 科技网站设计案例百度收录情况查询
  • gif放网站有锯齿策划公司宣传语
  • 淘宝客做网站怎样推广空间购买后打不开网站
  • 信阳网站设计银川网站建设nx110
  • 建设安全协会网站58招聘运营网站怎么做
  • 做原创的网站做游戏平面设计好的素材网站有哪些
  • 校园网站wordpress 防攻击插件
  • wordpress 更好的主题丁的老头seo博客
  • 上海市工程信息网站北京专业网站翻译影音字幕翻译速记速记速记速而高效
  • 网站建设心得体会500字网页制作三剑客是指什么
  • 大连做网站优化一级a做爰片 网站就能看
  • 网站优化页面中山seo网络推广
  • 建设网站一定要数据库吗湖北百度seo
  • 下载了wordpress然后怎么用怎样健建设一个有利于优化的网站
  • 网站开发心得500字做代售机票网站程序
  • php电影网站开发凡诺网站建设