diff --git a/hgdriver/ImageProcess/ImageApplyDiscardBlank.cpp b/hgdriver/ImageProcess/ImageApplyDiscardBlank.cpp index 9b9f6ad..ac0845e 100644 --- a/hgdriver/ImageProcess/ImageApplyDiscardBlank.cpp +++ b/hgdriver/ImageProcess/ImageApplyDiscardBlank.cpp @@ -33,28 +33,38 @@ void CImageApplyDiscardBlank::apply(std::vector& mats, bool isTwoSide) } } -bool maxMinCompare(const cv::Mat& img, const cv::Mat& mask, double devTh, double meanTh) +bool maxMinCompare(const cv::Mat& img, const cv::Mat& mask, double devTh, double bgc) { double min, max; cv::minMaxLoc(img, &min, &max, 0, 0, mask); - if (cv::mean(img, mask)[0] < meanTh) - return false; - return (max - min) < devTh; + + return abs(max - bgc) < devTh && abs(min - bgc) < devTh; } +static int a = 0; bool CImageApplyDiscardBlank::apply(const cv::Mat& pDib, double threshold, int edge, double devTh, double meanTh, int dilate) { if (pDib.empty()) return true; double resizeScale = 1.0; - while (pDib.cols * resizeScale > 400) + while ((pDib.cols * resizeScale > 500) && (pDib.rows * resizeScale > 500)) resizeScale /= 2; cv::Mat img_resize; cv::resize(pDib, img_resize, cv::Size(), resizeScale, resizeScale, cv::INTER_LINEAR); - cv::blur(img_resize, img_resize, cv::Size(3, 3)); - //cv::imwrite("img_resize.jpg", img_resize); + //cv::dilate(img_resize, img_resize, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(dilate, dilate))); + cv::blur(img_resize, img_resize, cv::Size(dilate, dilate)); + + cv::Scalar bgc = hg::getBackGroundColor(img_resize, cv::Mat(), 20); + if (pDib.channels() == 3) + if ((bgc[0] + bgc[1] + bgc[2]) < meanTh * 3) + return false; + if (pDib.channels() == 1) + if (bgc[0] < meanTh ) + return false; + + //cv::imwrite(std::to_string(a) + "r.jpg", img_resize); cv::Mat threshold_img; if (img_resize.channels() == 3) { @@ -74,19 +84,20 @@ bool CImageApplyDiscardBlank::apply(const cv::Mat& pDib, double threshold, int e contour.push_back(p); cv::RotatedRect rect = hg::getBoundingRect(contour); - rect.size = cv::Size2f(rect.size.width - edge * resizeScale, rect.size.height - edge * resizeScale); + rect.size = cv::Size2f(rect.size.width - edge * resizeScale * 2, rect.size.height - edge * resizeScale * 2); cv::Point2f box[4]; rect.points(box); + contour.clear(); contours.clear(); - for (size_t i = 0; i < 4; i++) contour.push_back(box[i]); contours.push_back(contour); + cv::Mat mask = cv::Mat::zeros(img_resize.size(), CV_8UC1); hg::fillPolys(mask, contours, cv::Scalar::all(255)); - //cv::imwrite("mask.jpg", mask); - + //cv::imwrite(std::to_string(a) + "m.jpg", mask); + a++; bool b = true; if (img_resize.channels() == 3) { @@ -94,11 +105,11 @@ bool CImageApplyDiscardBlank::apply(const cv::Mat& pDib, double threshold, int e cv::split(img_resize, bgr); for (size_t i = 0; i < 3; i++) { - b &= maxMinCompare(bgr[i], mask, devTh, meanTh); + b &= maxMinCompare(bgr[i], mask, devTh, bgc[i]); if (!b) break; } } else - b &= maxMinCompare(img_resize, mask, devTh, meanTh); + b &= maxMinCompare(img_resize, mask, devTh, bgc[0]); return b; } diff --git a/hgdriver/ImageProcess/ImageApplyDiscardBlank.h b/hgdriver/ImageProcess/ImageApplyDiscardBlank.h index a6149fe..412e93f 100644 --- a/hgdriver/ImageProcess/ImageApplyDiscardBlank.h +++ b/hgdriver/ImageProcess/ImageApplyDiscardBlank.h @@ -5,29 +5,30 @@ * 作者:刘丁维 * 生成时间:2020/4/21 * 最近修改时间:2020/4/21 v1.0 - 2020/8/12 v1.1 开放setIntensity和setMinArea;取消isNormal标识位;扩大setIntensity的设置范围,从[2, 20]扩大到[1, 100] - 2020/8/25 v1.1.1 纸张检测缩进,从100像素调整到20像素 - 2020/10/16 v1.2 添加新接口,能够高效便捷判断图片是否为空白页 - 2020/10/19 v1.2.1 修复静态空白页判断识别误判的BUG - 2021/04/13 v1.3.0 增加标准/票据标识位 - 2021/08/12 v1.3.1 添加防止不同opencv版本导致计算结果存在差异的代码。 - 2021/12/14 v1.3.2 重构算法。 - 2021/12/15 v1.3.3 微调参数。 - 2021/12/17 v1.3.4 增加背景色接口,实现对纯色纸张的空白页判定 - 2022/09/07 v1.3.5 修复部分参数传递的BUG - 2022/09/19 v1.4 增加模糊处理,提高空白页的过滤能力 - 2022/09/19 v1.4.1 调整模糊处理步骤 - 2022/11/18 v1.4.2 调整默认参数 - 2022/11/29 v1.5 增加纸张杂点忽略功能 - 2022/12/03 v1.5.1 调整纸张杂点忽略逻辑,避免把细条纹(有效信息)给忽略掉;默认将图像按照灰度图进行识别。 - 2023/10/12 v1.6 添加新的空白页识别方案。采用JEPG文件大小判断是否为空白页。 - 2023/10/20 v1.6.1 优化JPEG文件大小判断空白页 - 2023/10/30 v1.7 调整JPEG文件大小判断空白页的算法接口 - 2023/11/04 v1.7.1 增加PNG二值化文件大小判断空白页的选项 - 2023/12/01 v1.8 取消JPEG/PNG文件大小判断空白页方案 - 2023/12/04 v1.9 提高算法效率。 - 2023/12/05 v1.9.1 修改错误代码;修改参数注释。 - * 版本号:v1.9.1 + 2020/8/12 v1.1 开放setIntensity和setMinArea;取消isNormal标识位;扩大setIntensity的设置范围,从[2, 20]扩大到[1, 100] + 2020/8/25 v1.1.1 纸张检测缩进,从100像素调整到20像素 + 2020/10/16 v1.2 添加新接口,能够高效便捷判断图片是否为空白页 + 2020/10/19 v1.2.1 修复静态空白页判断识别误判的BUG + 2021/04/13 v1.3.0 增加标准/票据标识位 + 2021/08/12 v1.3.1 添加防止不同opencv版本导致计算结果存在差异的代码。 + 2021/12/14 v1.3.2 重构算法。 + 2021/12/15 v1.3.3 微调参数。 + 2021/12/17 v1.3.4 增加背景色接口,实现对纯色纸张的空白页判定 + 2022/09/07 v1.3.5 修复部分参数传递的BUG + 2022/09/19 v1.4 增加模糊处理,提高空白页的过滤能力 + 2022/09/19 v1.4.1 调整模糊处理步骤 + 2022/11/18 v1.4.2 调整默认参数 + 2022/11/29 v1.5 增加纸张杂点忽略功能 + 2022/12/03 v1.5.1 调整纸张杂点忽略逻辑,避免把细条纹(有效信息)给忽略掉;默认将图像按照灰度图进行识别。 + 2023/10/12 v1.6 添加新的空白页识别方案。采用JEPG文件大小判断是否为空白页。 + 2023/10/20 v1.6.1 优化JPEG文件大小判断空白页 + 2023/10/30 v1.7 调整JPEG文件大小判断空白页的算法接口 + 2023/11/04 v1.7.1 增加PNG二值化文件大小判断空白页的选项 + 2023/12/01 v1.8 取消JPEG/PNG文件大小判断空白页方案 + 2023/12/04 v1.9 提高算法效率。 + 2023/12/05 v1.9.1 修改错误代码;修改参数注释。 + 2023/12/08 v1.10 调整空白页判定条件。修复mask精度bug。 + * 版本号:v1.10 * ==================================================== */ diff --git a/hgdriver/ImageProcess/ImageApplyOutHole.cpp b/hgdriver/ImageProcess/ImageApplyOutHole.cpp index 9effeb8..7d86bbc 100644 --- a/hgdriver/ImageProcess/ImageApplyOutHole.cpp +++ b/hgdriver/ImageProcess/ImageApplyOutHole.cpp @@ -84,6 +84,27 @@ void CImageApplyOutHole::apply(std::vector& mats, bool isTwoSide) back = mats[1]; } + cv::Mat thumbnail; + cv::resize(front, thumbnail, cv::Size(200, 200)); + cv::Scalar color_front = hg::getBackGroundColor(thumbnail, cv::Mat(), 20); + if (color_front[1] == 0) + if (color_front[0] < m_threshold) + return; + + if (color_front[1] != 0) + if ((color_front[0] + color_front[1] + color_front[2]) < m_threshold * 3) + return; + + cv::resize(back, thumbnail, cv::Size(200, 200)); + cv::Scalar color_back = hg::getBackGroundColor(thumbnail, cv::Mat(), 20); + if (color_back[1] == 0) + if (color_back[0] < m_threshold) + return; + + if (color_back[1] != 0) + if ((color_back[0] + color_back[1] + color_back[2]) < m_threshold * 3) + return; + cv::Mat front_thre, back_thre; hg::threshold_Mat(front, front_thre, m_threshold); hg::threshold_Mat(back, back_thre, m_threshold); @@ -177,9 +198,6 @@ void CImageApplyOutHole::apply(std::vector& mats, bool isTwoSide) for (size_t j = 0; j < hole_contours[i].size(); j++) hole_contours[i][j] /= resize_scale; - cv::Mat thumbnail; - cv::resize(front(roi_front), thumbnail, cv::Size(200, 200)); - cv::Scalar color = hg::getBackGroundColor(thumbnail, cv::Mat(), m_threshold); roi_front.x /= resize_scale; roi_front.y /= resize_scale; roi_front.width /= resize_scale; @@ -187,10 +205,10 @@ void CImageApplyOutHole::apply(std::vector& mats, bool isTwoSide) for (size_t i = 0; i < hole_contours.size(); i++) { std::vector> contourss_temp; - dilateContour(hole_contours[i], m_borderSize / 4); + dilateContour(hole_contours[i], cv::max(m_borderSize / 2, 5.0f)); contourss_temp.push_back(hole_contours[i]); cv::Mat front_temp = mats[0](roi_front); - hg::fillPolys(front_temp, contourss_temp, color); + hg::fillPolys(front_temp, contourss_temp, color_front); } if (isTwoSide) @@ -198,8 +216,6 @@ void CImageApplyOutHole::apply(std::vector& mats, bool isTwoSide) int width_ = roi_back.width; roi_back.x = back.cols - roi_back.width - roi_back.x; //因为之前反面图像翻转,所以现在ROI也要进行相应翻转 - cv::resize(back(roi_back), thumbnail, cv::Size(200, 200)); - color = hg::getBackGroundColor(thumbnail, cv::Mat(), m_threshold); roi_back.x /= resize_scale; roi_back.y /= resize_scale; roi_back.width /= resize_scale; @@ -217,10 +233,10 @@ void CImageApplyOutHole::apply(std::vector& mats, bool isTwoSide) } std::vector> contours_temp; - dilateContour(hole_contour, m_borderSize / 4); + dilateContour(hole_contour, cv::max(m_borderSize / 2, 5.0f)); contours_temp.push_back(hole_contour); cv::Mat back_temp = mats[1](roi_back); - hg::fillPolys(back_temp, contours_temp, color); + hg::fillPolys(back_temp, contours_temp, color_back); } } #ifdef LOG diff --git a/hgdriver/ImageProcess/ImageApplyOutHole.h b/hgdriver/ImageProcess/ImageApplyOutHole.h index c3063a8..ac5f98c 100644 --- a/hgdriver/ImageProcess/ImageApplyOutHole.h +++ b/hgdriver/ImageProcess/ImageApplyOutHole.h @@ -29,7 +29,8 @@ * v1.10 2023/11/18 替换形态学膨胀孔洞轮廓,改为特征矩阵膨胀轮廓说。 * v1.10.1 2023/11/28 形态学kSize根据borderSize调整。 * v1.11 2023/12/02 替换文稿底色提取方案;修复部分孔洞填充不完全的问题。 - * 版本号:v1.11 + * v1.11.1 2023/12/08 增加机制,当发现文稿底色<阈值时,直接返回。避免浪费无意义的算力;增大填涂面积 + * 版本号:v1.11.1 * ==================================================== */ diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 034d086..2e5998b 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -109,7 +109,7 @@ namespace settings {200.0f, 1}, {240.0f, 1}, {300.0f, 0}, - {600.0f, 1} //涓存椂鐗堟湰鍙1 鍘熸潵鍙2 + {600.0f, 1} //涓存椂鐗堟湰鍙? 鍘熸潵鍙? }; bool is_equal(float l, float r) { @@ -331,7 +331,7 @@ int hg_scanner_239::set_auto_flat(int data) } if ((fw[5] == 'A' && atoi(fw.substr(6, 4).c_str()) <= 9999)) { - data = data == 1 ? 1 : 0; //鏆傛椂娌℃湁鐢ㄣ + data = data == 1 ? 1 : 0; //鏆傛椂娌℃湁鐢ㄣ? } if (!wait_usb_.is_waiting()) { @@ -569,7 +569,7 @@ void hg_scanner_239::init_version(void) { firmware_sup_wait_paper_ = year_date.compare("3B0629") >= 0 ? true : false; firmware_sup_log_export_ = true; - firmware_sup_pick_strength_ = false; //涓嶆敮鎸 + firmware_sup_pick_strength_ = false; //涓嶆敮鎸? firmware_sup_wake_device_ = year_date.compare("3C0518") >= 0 ? true : false; firmware_sup_color_corr_ = year.compare("3C") >= 0 ? true : false; firmware_sup_double_img = year_date.compare("3C1021") >= 0 ? true : false; @@ -601,7 +601,7 @@ int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware: int ret = SCANNER_ERR_OK; if (!type) return ret; - setting_hardware::HGSCANCONF_3399 p = dev_conf_; //涓嶅緱鏀瑰彉澶栭儴鐨勫 + setting_hardware::HGSCANCONF_3399 p = dev_conf_; //涓嶅緱鏀瑰彉澶栭儴鐨勫? p.params_3399.is_autopaper = is_auto_scan(); if (!dev_conf) dev_conf = &p; @@ -622,7 +622,7 @@ int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware: dev_conf->params_3399.is_fixedpaper = false; dev_conf->params_3399.en_autosize = true; } - if (!firmware_sup_auto_speed_ && image_prc_param_.bits.paper == PAPER_AUTO_MATCH)//3399 ,鍦3C涔嬪墠鐨勭増鏈 鍖归厤鍘熷灏哄璁剧疆 12 + if (!firmware_sup_auto_speed_ && image_prc_param_.bits.paper == PAPER_AUTO_MATCH)//3399 ,鍦?C涔嬪墠鐨勭増鏈?鍖归厤鍘熷灏哄璁剧疆 12 { dev_conf->params_3399.paper = 12; } @@ -677,9 +677,9 @@ int hg_scanner_239::writedown_image_configuration(void) ret = write_register(setting3399::SR_CONFIF_IMGPROCPARAM, sizeof(SCANCONF)); ret = io_->write_bulk(&ic, &len); - //杩欎釜鍦版柟浼戠湢鏄负浜嗗綋鍒濇煇涓瀷鍙疯澶囦笅闈㈠湪鍒濆鍖栨煇涓崗璁椂姣旇緝鑰楁椂锛屾墍浠ュ姞涓娿 - //2023/11/30 鏅笘闇瑕佽兘澶熻緝涓烘祦绋嬬偣鍑绘壂鎻忓埌鍑虹涓寮犲浘锛屾墍浠ヨ繖涓湴鏂硅繘琛屽睆钄斤紝濡傛灉鏌愬ぉ鏈夊摢鍙拌澶囦笉鍑哄浘锛屼綘鍙互鐪嬩笅杩欓噷锛屽鐗堟湰杩涜鍒ゆ柇鍔犱笂杩欎釜寤舵椂鐨勬搷浣 - // 娉ㄦ剰debug 鍙兘浼氳皟璇曚笉鍑烘潵锛屽洜涓鸿鍔犺浇debug淇℃伅锛屾墍浠ュ彂閫佷俊鎭氨浼氭參鐐 + //杩欎釜鍦版柟浼戠湢鏄负浜嗗綋鍒濇煇涓瀷鍙疯澶囦笅闈㈠湪鍒濆鍖栨煇涓崗璁椂姣旇緝鑰楁椂锛屾墍浠ュ姞涓娿? + //2023/11/30 鏅笘闇瑕佽兘澶熻緝涓烘祦绋嬬偣鍑绘壂鎻忓埌鍑虹涓寮犲浘锛屾墍浠ヨ繖涓湴鏂硅繘琛屽睆钄斤紝濡傛灉鏌愬ぉ鏈夊摢鍙拌澶囦笉鍑哄浘锛屼綘鍙互鐪嬩笅杩欓噷锛屽鐗堟湰杩涜鍒ゆ柇鍔犱笂杩欎釜寤舵椂鐨勬搷浣? + // 娉ㄦ剰debug 鍙兘浼氳皟璇曚笉鍑烘潵锛屽洜涓鸿鍔犺浇debug淇℃伅锛屾墍浠ュ彂閫佷俊鎭氨浼氭參鐐? //this_thread::sleep_for(chrono::milliseconds(500)); //io_->set_timeout(2000);//蹇呰寤舵椂 } @@ -927,7 +927,7 @@ int hg_scanner_239::on_resolution_changed(int& dpi) else dev_conf_.params_3399.dpi = dpi >= 500 ? 3 : (dpi < 500 && dpi> 299) ? 2 : 1; - //dev_conf_.params_3399.dpi = 1; //dpi 鍗庡噷cis鍜屾暒鍗梒is 榛樿鍙1鏃犻渶鏀瑰彉 + //dev_conf_.params_3399.dpi = 1; //dpi 鍗庡噷cis鍜屾暒鍗梒is 榛樿鍙?鏃犻渶鏀瑰彉 int ret = writedown_device_configuration(); return ret; } @@ -985,7 +985,7 @@ int hg_scanner_239::on_skew_check_changed(bool& check) int hg_scanner_239::on_skew_check_level_changed(int& check) { int ret = SCANNER_ERR_OK, - val = check - 1,//娑撳﹪娼扮拋鍓х枂閻ㄥ嫭妲1 - 5 閿涘本甯撮崣妤勫瘱閸ユ潙鈧棿璐0 - 4閿涘矂绮拋? + val = check - 1,//娑撳﹪娼扮拋鍓х枂閻ㄥ嫭妲? - 5 閿涘本甯撮崣妤勫瘱閸ユ潙鈧棿璐? - 4閿涘矂绮拋? old = dev_conf_.params_3399.screw_detect_level; setting_hardware::HGSCANCONF_3399 cf; @@ -1353,11 +1353,11 @@ void hg_scanner_239::thread_get_dves_image(void) while (run_)//&& !user_cancel_ { size = sizeof(buf); + memset(buf, 0, size); { std::lock_guard lock(io_lock_); - memset(buf, 0, size); - io_->set_timeout(500); //2023 11 30涔嬪墠涓鐩翠娇鐢1000ms 锛屼絾鏄负浜嗚兘澶熷揩閫熷搷搴斾笅娆$殑鐘舵佷俊鎭繑鍥炶繖閲岃缃负500ms + io_->set_timeout(500); //2023 11 30涔嬪墠涓鐩翠娇鐢?000ms 锛屼絾鏄负浜嗚兘澶熷揩閫熷搷搴斾笅娆$殑鐘舵佷俊鎭繑鍥炶繖閲岃缃负500ms ret = io_->read_interrupt(buf, &size); } @@ -1366,7 +1366,7 @@ void hg_scanner_239::thread_get_dves_image(void) if (sw.elapsed_s() > 120 && !is_auto_scan()) { status_ = ret; - notify_ui_working_status(from_default_language(STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, ret); // 閸欐牕娴橀柅姘繆鐡掑懏妞 + notify_ui_working_status(from_default_language(STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, ret); // 閸欐牕娴橀柅姘繆鐡掑懏妞? VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get image time out:%s\n", hg_scanner_err_name(status_)); break; } @@ -1392,7 +1392,10 @@ void hg_scanner_239::thread_get_dves_image(void) LOG_INFO(LOG_LEVEL_DEBUG_INFO, "User cancelled (checked when read INT timeout), we faked a 'STOP' messag to enter exiting process ...\n"); } else + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // for BUG-843 continue; + } } else if (ret != SCANNER_ERR_OK) @@ -1422,7 +1425,7 @@ void hg_scanner_239::thread_get_dves_image(void) } //break; - //鏉╂瑤閲滈弮璺衡偓娆撯偓鈧崙铏规畱鐠囨繃绉烽幁顖氭皑鏉╂ɑ鐥呯拠璇茬暚閿涘矂鏁婄拠顖欎繆閹垰鍘涙穱婵嗙摠娑撳娼甸敍灞藉涧閺堝骞忛崣鏍у煂stop閺冭埖澧犻柅鈧崙鐚寸礉婵″倹鐏夊▽陇骞忛崣鏍х暚闁偓閸戠尨绱濋崣顖濆厴娴兼艾顕遍懛瀵割儑娴滃本顐奸幍顐e伎閻╁瓨甯存潻鏂挎礀閹殿偅寮跨瑰本鍨 + //鏉╂瑤閲滈弮璺衡偓娆撯偓鈧崙铏规畱鐠囨繃绉烽幁顖氭皑鏉╂ɑ鐥呯拠璇茬暚閿涘矂鏁婄拠顖欎繆閹垰鍘涙穱婵嗙摠娑撳娼甸敍灞藉涧閺堝骞忛崣鏍у煂stop閺冭埖澧犻柅鈧崙鐚寸礉婵″倹鐏夊▽陇骞忛崣鏍х暚闁偓閸戠尨绱濋崣顖濆厴娴兼艾顕遍懛瀵割儑娴滃本顐奸幍顐e伎閻╁瓨甯存潻鏂挎礀閹殿偅寮跨瑰本鍨? } if (info->From == setting3399::IMG) { @@ -1445,8 +1448,8 @@ void hg_scanner_239::thread_get_dves_image(void) //else // VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status(0x%x) is not accept in usb thread\n", status); } - else if (info->From == setting3399::STOPSCAN)//閸ヨ桨娆㈤悧鍫熸拱:3B0326閼惧嘲褰囬弮鐘电剨閺冭绱濇稉瀣桨娑擃厽鏌囨穱鈩冧紖娴兼艾鍘涢崣鎴炴¥缁剧ǹ婀崑婊勵剾閹殿偅寮,閻掕泛鎮楅崷銊ュ絺閺冪姷鐒 - { //濮濄倖妞俰nt缁旑垳鍋f潻妯款洣娣団剝浼呭▽鈩冩箒鐠囪褰囩瑰矉绱濋懓灞肩瑬闁偓閸戣櫣鍋i崙鑽ゆ埛缂侇厽澹傞幓蹇ョ礉娑撳娼扮拋鎯ь槵鏉╂ɑ婀紒鎾存将閹殿偅寮 + else if (info->From == setting3399::STOPSCAN)//閸ヨ桨娆㈤悧鍫熸拱:3B0326閼惧嘲褰囬弮鐘电剨閺冭绱濇稉瀣桨娑擃厽鏌囨穱鈩冧紖娴兼艾鍘涢崣鎴炴¥缁剧ǹ婀崑婊勵剾閹殿偅寮?閻掕泛鎮楅崷銊ュ絺閺冪姷鐒? + { //濮濄倖妞俰nt缁旑垳鍋f潻妯款洣娣団剝浼呭▽鈩冩箒鐠囪褰囩瑰矉绱濋懓灞肩瑬闁偓閸戣櫣鍋i崙鑽ゆ埛缂侇厽澹傞幓蹇ョ礉娑撳娼扮拋鎯ь槵鏉╂ɑ婀紒鎾存将閹殿偅寮? if (!svdevs_err_.empty()) { status_ = svdevs_err_.front(); @@ -1580,7 +1583,7 @@ int hg_scanner_239::do_start(void) reset(); - //211220鍥轰欢鐗堟湰涓嶆敮鎸佽繑鍥 + //211220鍥轰欢鐗堟湰涓嶆敮鎸佽繑鍥? ret = get_scan_is_sleep(val); if (!val && ret == SCANNER_ERR_OK) { @@ -1871,7 +1874,7 @@ int hg_scanner_239::get_scan_is_sleep(SANE_Bool& type) std::lock_guard lock(io_lock_); int ret = 0,val; - ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0浼戠湢 1鍞ら啋鐘舵 + ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0浼戠湢 1鍞ら啋鐘舵? if (ret == SCANNER_ERR_OK) { type = val == 1 ? true : false; @@ -2046,7 +2049,7 @@ int hg_scanner_239::set_scan_lock_check_val(string check_str) { return SCANNER_ERR_INVALID_PARAMETER; } - int num = 32 - keys.size(); //淇濇寔32浣嶄笅鍙 + int num = 32 - keys.size(); //淇濇寔32浣嶄笅鍙? if (num > 0) { std::string str(num, '0'); @@ -2106,7 +2109,7 @@ int hg_scanner_239::set_firmware_upgrade(std::string filename) return SCANNER_ERR_OPEN_FILE_FAILED; } fwname.seekg(0, std::ios::end); - int total = fwname.tellg();//璁板綍鎬婚暱搴 + int total = fwname.tellg();//璁板綍鎬婚暱搴? fwname.seekg(0, std::ios::beg); int pos = fwname.tellg();//璁板綍pos浣嶇疆 @@ -2145,7 +2148,7 @@ int hg_scanner_239::set_firmware_upgrade(std::string filename) return SCANNER_ERR_DEVICE_UPGRADE_FAIL; int to_cnt = 0; - // 鍒拌繖涓綅缃凡缁忚兘澶熷崌绾ф垚鍔熶簡 鍚庨潰瀵瑰崌绾х粨鏋滃仛涓嬪垽鏂 + // 鍒拌繖涓綅缃凡缁忚兘澶熷崌绾ф垚鍔熶簡 鍚庨潰瀵瑰崌绾х粨鏋滃仛涓嬪垽鏂? auto now = std::chrono::steady_clock::now(); while (std::chrono::duration(std::chrono::steady_clock::now() - now).count() < 70) { @@ -2216,7 +2219,7 @@ int hg_scanner_239::set_dev_islock_file(int islockfile) } if (islockfile != 0 && islockfile != 1) { - return SCANNER_ERR_INVALID_PARAMETER; //杩欎釜鍦版柟璁剧疆鐨勫弬鏁板繀椤讳繚璇佹纭 + return SCANNER_ERR_INVALID_PARAMETER; //杩欎釜鍦版柟璁剧疆鐨勫弬鏁板繀椤讳繚璇佹纭? } string device_log_path = "/var/log/black_list_file.txt"; string str = std::to_string(islockfile); diff --git a/hgdriver/hgdev/image_process.cpp b/hgdriver/hgdev/image_process.cpp index a79799b..ed1001f 100644 --- a/hgdriver/hgdev/image_process.cpp +++ b/hgdriver/hgdev/image_process.cpp @@ -449,7 +449,7 @@ namespace hg_imgproc edgeScale[1] = low; edgeScale[2] = l; edgeScale[3] = r; - CImageApplyOutHole outh(val, edgeScale, 50); + CImageApplyOutHole outh(val, edgeScale, 20); outh.apply(v, true); if (v.empty()) { @@ -1167,7 +1167,7 @@ namespace hg_imgproc mats_.clear(); double threshold = 40; - int edge = 40; + int edge = 100; int dis = img_conf_.discardblank_percent; if (img_conf_.is_autodiscradblank_vince) dis *= 1.5;