code_device/hgdriver/hgdev/imgproc-pak/multi_out.cpp

92 lines
4.4 KiB
C++

#include "multi_out.h"
#include <json/gb_json.h>
#include <huagao/hgscanner_error.h>
#include <sane/sane_option_definitions.h>
#include <lang/app_language.h>
#include <sane/sane_ex.h>
static std::string device_opt_json[] = {
"{\"is-multiout\":{\"cat\":\"base\",\"group\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"fix-id\":34817,\"auth\":0,\"size\":4,\"cur\":false,\"default\":false},\"multiout-type\":{\"cat\":\"base\",\"group\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"fix-id\":34818,\"auth\":0,\"enabled\":false,\"size\":66,\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend\":\"is-multiout==true\"},\"mo-threshold\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u591a\\u6d41\\u9ed1\\u767d\\u9608\\u503c\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u9608\\u503c\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":40,\"default\":40,\"range\":{\"min\":1,\"max\":255,\"step\":1},\"depend\":\"is-multiout==true\"},\"mo-bin-type\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u65b9\\u6cd5\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u65b9\\u6cd5\",\"type\":\"string\",\"auth\":0,\"size\":28,\"cur\":\"\\u5355\\u9608\\u503c\",\"default\":\"\\u5355\\u9608\\u503c\",\"range\":[\"\\u5355\\u9608\\u503c\",\"\\u5927\\u6d25\\u9608\\u503c\",\"\\u9ad8\\u65af\\u5c40\\u90e8\\u81ea\\u9002\\u5e94\",\"\\u5747\\u503c\\u5c40\\u90e8\\u81ea\\u9002\\u5e94\",\"\\u9519\\u8bef\\u6269\\u6563\"],\"depend\":\"is-multiout==true\"},\"mo-bin-block-size\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u5757\\u5927\\u5c0f\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u5757\\u5927\\u5c0f\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":51,\"default\":51,\"range\":{\"min\":5,\"max\":200,\"step\":1},\"depend\":\"is-multiout==true\"},\"mo-bin-const\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u5e38\\u91cf\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u5e38\\u91cf\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":41,\"default\":41,\"range\":{\"min\":5,\"max\":200,\"step\":1},\"depend\":\"is-multiout==true\"}}"
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// image_processor
multi_outer::multi_outer() : image_processor("multi_outer")
{
std::string json("");
for (auto& v : device_opt_json)
json += v;
set_opt_json_text(&json[0]);
enabled_ = false;
}
multi_outer::~multi_outer()
{}
int multi_outer::type_from_str(const char* type)
{
static struct
{
std::string str;
int type;
}typemap[] = {
{ OPTION_VALUE_DLSCLX_CS_HD_HB, IMageMulti::ALL},
{ OPTION_VALUE_DLSCLX_CS_HD, IMageMulti::COLORGRAY },
{ OPTION_VALUE_DLSCLX_CS_HB, IMageMulti::COLORBW },
{ OPTION_VALUE_DLSCLX_HD_HB, IMageMulti::GRAYBW }
};
for (auto& v : typemap)
{
if (v.str == type)
return v.type;
}
return typemap[0].type;
}
int multi_outer::set_value(const char* name, void* val)
{
int ret = SCANNER_ERR_OK; // SCANNER_ERR_DEVICE_NOT_SUPPORT;
if (strcmp(name, SANE_STD_OPT_NAME_IS_MULTI_OUT) == 0)
enabled_ = *(bool*)val;
else if (strcmp(name, SANE_STD_OPT_NAME_MULTI_OUT_TYPE) == 0)
type_ = multi_outer::type_from_str(to_default_language((char*)val, nullptr));
else
ret = SCANNER_ERR_DEVICE_NOT_SUPPORT;
return ret;
}
void multi_outer::enable(const char* name, bool able)
{
enabled_ = able;
}
int multi_outer::process(std::vector<PROCIMGINFO>& in, std::vector<PROCIMGINFO>& out)
{
int ret = SCANNER_ERR_OK;
if (!enabled_)
out = in;
else
{
IMageMulti multi(type_, threshold_, threshold_type_, block_size_, constant_);
for (auto& v : in)
{
std::vector<cv::Mat> o = multi.apply(v.img);
}
}
return ret;
}