uint8_t BT::sendCMD(const char* str) { if(!present) return 1; cmdMode(); return sendP(str); }
bool Wifly::close() { wait(0.25); if (!cmdMode()) return false; if (send("close\r", 6, "CLOS") == -1) return false; exit(); return true; }
bool Wifly::sendCommand(const char * cmd, const char * ack, char * res, int timeout) { if (!cmd_mode) { cmdMode(); } if (send(cmd, strlen(cmd), ack, res, timeout) == -1) { ERR("sendCommand: cannot %s\r\n", cmd); exit(); return false; } return true; }
int main(int argc, char** argv) { int ret = 1; // definition of command line arguments TCLAP::CmdLine cmd("waifu2x reimplementation using OpenCV", ' ', "1.0.0"); TCLAP::ValueArg<std::string> cmdInputFile("i", "input_file", "path to input image file (you should input full path)", true, "", "string", cmd); TCLAP::ValueArg<std::string> cmdOutputFile("o", "output_file", "path to output image file (you should input full path)", false, "(auto)", "string", cmd); std::vector<std::string> cmdModeConstraintV; cmdModeConstraintV.push_back("noise"); cmdModeConstraintV.push_back("scale"); cmdModeConstraintV.push_back("noise_scale"); TCLAP::ValuesConstraint<std::string> cmdModeConstraint(cmdModeConstraintV); TCLAP::ValueArg<std::string> cmdMode("m", "mode", "image processing mode", false, "noise_scale", &cmdModeConstraint, cmd); std::vector<int> cmdNRLConstraintV; cmdNRLConstraintV.push_back(1); cmdNRLConstraintV.push_back(2); TCLAP::ValuesConstraint<int> cmdNRLConstraint(cmdNRLConstraintV); TCLAP::ValueArg<int> cmdNRLevel("", "noise_level", "noise reduction level", false, 1, &cmdNRLConstraint, cmd); TCLAP::ValueArg<double> cmdScaleRatio("", "scale_ratio", "custom scale ratio", false, 2.0, "double", cmd); TCLAP::ValueArg<std::string> cmdModelPath("", "model_dir", "path to custom model directory (don't append last / )", false, "models_rgb", "string", cmd); TCLAP::ValueArg<int> cmdNumberOfJobs("j", "jobs", "number of threads launching at the same time", false, 0, "integer", cmd); TCLAP::SwitchArg cmdForceOpenCL("", "force-OpenCL", "force to use OpenCL on Intel Platform", cmd, false); TCLAP::SwitchArg cmdDisableGPU("", "disable-gpu", "disable GPU", cmd, false); TCLAP::ValueArg<int> cmdBlockSize("", "block_size", "block size", false, 0, "integer", cmd); // definition of command line argument : end // parse command line arguments try { cmd.parse(argc, argv); } catch (std::exception &e) { std::cerr << e.what() << std::endl; std::cerr << "Error : cmd.parse() threw exception" << std::endl; std::exit(-1); } std::string outputFileName = cmdOutputFile.getValue(); if (outputFileName == "(auto)") { outputFileName = cmdInputFile.getValue(); int tailDot = outputFileName.find_last_of('.'); outputFileName.erase(tailDot, outputFileName.length()); outputFileName = outputFileName + "(" + cmdMode.getValue() + ")"; std::string &mode = cmdMode.getValue(); if(mode.find("noise") != mode.npos){ outputFileName = outputFileName + "(Level" + std::to_string(cmdNRLevel.getValue()) + ")"; } if(mode.find("scale") != mode.npos){ outputFileName = outputFileName + "(x" + std::to_string(cmdScaleRatio.getValue()) + ")"; } outputFileName += ".png"; } enum W2XConvGPUMode gpu = W2XCONV_GPU_AUTO; if (cmdDisableGPU.getValue()) { gpu = W2XCONV_GPU_DISABLE; } else if (cmdForceOpenCL.getValue()) { gpu = W2XCONV_GPU_FORCE_OPENCL; } W2XConv *converter = w2xconv_init(gpu, cmdNumberOfJobs.getValue(), 1); double time_start = getsec(); switch (converter->target_processor.type) { case W2XCONV_PROC_HOST: printf("CPU: %s\n", converter->target_processor.dev_name); break; case W2XCONV_PROC_CUDA: printf("CUDA: %s\n", converter->target_processor.dev_name); break; case W2XCONV_PROC_OPENCL: printf("OpenCL: %s\n", converter->target_processor.dev_name); break; } int bs = cmdBlockSize.getValue(); int r = w2xconv_load_models(converter, cmdModelPath.getValue().c_str()); if (r < 0) { goto error; } { int nrLevel = 0; if (cmdMode.getValue() == "noise" || cmdMode.getValue() == "noise_scale") { nrLevel = cmdNRLevel.getValue(); } double scaleRatio = 1; if (cmdMode.getValue() == "scale" || cmdMode.getValue() == "noise_scale") { scaleRatio = cmdScaleRatio.getValue(); } r = w2xconv_convert_file(converter, outputFileName.c_str(), cmdInputFile.getValue().c_str(), nrLevel, scaleRatio, bs); } if (r < 0) { goto error; } { double time_end = getsec(); double gflops_proc = (converter->flops.flop/(1000.0*1000.0*1000.0)) / converter->flops.filter_sec; double gflops_all = (converter->flops.flop/(1000.0*1000.0*1000.0)) / (time_end-time_start); std::cout << "process successfully done! (all:" << (time_end - time_start) << "[sec], " << gflops_all << "[GFLOPS], filter:" << converter->flops.filter_sec << "[sec], " << gflops_proc << "[GFLOPS])" << std::endl; } ret = 0; error: if (ret != 0) { char *err = w2xconv_strerror(&converter->last_error); puts(err); w2xconv_free(err); } w2xconv_fini(converter); return ret; }
int main(int argc, char** argv) { Waifu2x::init_liblary(argc, argv); // Caffeのエラーでないログを保存しないようにする google::SetLogDestination(google::INFO, ""); google::SetLogDestination(google::WARNING, ""); // Caffeのエラーログを「error_log_〜」に出力 google::SetLogDestination(google::ERROR, "error_log_"); google::SetLogDestination(google::FATAL, "error_log_"); // definition of command line arguments TCLAP::CmdLine cmd("waifu2x reimplementation using Caffe", ' ', "1.0.0"); TCLAP::ValueArg<std::string> cmdInputFile("i", "input_path", "path to input image file", true, "", "string", cmd); TCLAP::ValueArg<std::string> cmdOutputFile("o", "output_path", "path to output image file (when input_path is folder, output_path must be folder)", false, "(auto)", "string", cmd); TCLAP::ValueArg<std::string> cmdInputFileExt("l", "input_extention_list", "extention to input image file when input_path is folder", false, "png:jpg:jpeg:tif:tiff:bmp:tga", "string", cmd); TCLAP::ValueArg<std::string> cmdOutputFileExt("e", "output_extention", "extention to output image file when output_path is (auto) or input_path is folder", false, "png", "string", cmd); std::vector<std::string> cmdModeConstraintV; cmdModeConstraintV.push_back("noise"); cmdModeConstraintV.push_back("scale"); cmdModeConstraintV.push_back("noise_scale"); cmdModeConstraintV.push_back("auto_scale"); TCLAP::ValuesConstraint<std::string> cmdModeConstraint(cmdModeConstraintV); TCLAP::ValueArg<std::string> cmdMode("m", "mode", "image processing mode", false, "noise_scale", &cmdModeConstraint, cmd); std::vector<int> cmdNRLConstraintV; cmdNRLConstraintV.push_back(1); cmdNRLConstraintV.push_back(2); cmdNRLConstraintV.push_back(3); TCLAP::ValuesConstraint<int> cmdNRLConstraint(cmdNRLConstraintV); TCLAP::ValueArg<int> cmdNRLevel("n", "noise_level", "noise reduction level", false, 1, &cmdNRLConstraint, cmd); TCLAP::ValueArg<double> cmdScaleRatio("s", "scale_ratio", "custom scale ratio", false, 2.0, "double", cmd); TCLAP::ValueArg<double> cmdScaleWidth("w", "scale_width", "custom scale width", false, 0, "double", cmd); TCLAP::ValueArg<double> cmdScaleHeight("h", "scale_height", "custom scale height", false, 0, "double", cmd); TCLAP::ValueArg<std::string> cmdModelPath("", "model_dir", "path to custom model directory (don't append last / )", false, "models/anime_style_art_rgb", "string", cmd); std::vector<std::string> cmdProcessConstraintV; cmdProcessConstraintV.push_back("cpu"); cmdProcessConstraintV.push_back("gpu"); cmdProcessConstraintV.push_back("cudnn"); TCLAP::ValuesConstraint<std::string> cmdProcessConstraint(cmdProcessConstraintV); TCLAP::ValueArg<std::string> cmdProcess("p", "process", "process mode", false, "gpu", &cmdProcessConstraint, cmd); TCLAP::ValueArg<int> cmdOutputQuality("q", "output_quality", "output image quality", false, -1, "int", cmd); TCLAP::ValueArg<int> cmdOutputDepth("d", "output_depth", "output image chaneel depth bit", false, 8, "int", cmd); TCLAP::ValueArg<int> cmdCropSizeFile("c", "crop_size", "input image split size", false, 128, "int", cmd); TCLAP::ValueArg<int> cmdCropWidth("", "crop_w", "input image split size(width)", false, 128, "int", cmd); TCLAP::ValueArg<int> cmdCropHeight("", "crop_h", "input image split size(height)", false, 128, "int", cmd); TCLAP::ValueArg<int> cmdBatchSizeFile("b", "batch_size", "input batch size", false, 1, "int", cmd); TCLAP::ValueArg<int> cmdGPUNoFile("", "gpu", "gpu device no", false, 0, "int", cmd); std::vector<int> cmdTTAConstraintV; cmdTTAConstraintV.push_back(0); cmdTTAConstraintV.push_back(1); TCLAP::ValuesConstraint<int> cmdTTAConstraint(cmdTTAConstraintV); TCLAP::ValueArg<int> cmdTTALevel("t", "tta", "8x slower and slightly high quality", false, 0, &cmdTTAConstraint, cmd); // definition of command line argument : end TCLAP::Arg::enableIgnoreMismatched(); // parse command line arguments try { cmd.parse(argc, argv); } catch (std::exception &e) { printf("エラー: %s\n", e.what()); return 1; } boost::optional<double> ScaleRatio; boost::optional<int> ScaleWidth; boost::optional<int> ScaleHeight; int valid_num = 0; if (cmdScaleWidth.getValue() > 0) valid_num++; if (cmdScaleHeight.getValue() > 0) valid_num++; if (valid_num > 1) { printf("エラー: scale_widthとscale_heightは同時に指定できません\n"); return 1; } int crop_w = cmdCropSizeFile.getValue(); int crop_h = cmdCropSizeFile.getValue(); if (cmdCropWidth.isSet()) crop_w = cmdCropWidth.getValue(); if (cmdCropHeight.isSet()) crop_h = cmdCropHeight.getValue(); if (cmdScaleWidth.getValue() > 0) ScaleWidth = cmdScaleWidth.getValue(); else if (cmdScaleHeight.getValue() > 0) ScaleHeight = cmdScaleHeight.getValue(); else ScaleRatio = cmdScaleRatio.getValue(); const boost::filesystem::path input_path(boost::filesystem::absolute((cmdInputFile.getValue()))); std::string outputExt = cmdOutputFileExt.getValue(); if (outputExt.length() > 0 && outputExt[0] != '.') outputExt = "." + outputExt; const std::string ModelName = Waifu2x::GetModelName(cmdModelPath.getValue()); const bool use_tta = cmdTTALevel.getValue() == 1; std::vector<std::pair<std::string, std::string>> file_paths; if (boost::filesystem::is_directory(input_path)) // input_pathがフォルダならそのディレクトリ以下の画像ファイルを一括変換 { boost::filesystem::path output_path; if (cmdOutputFile.getValue() == "(auto)") { // 「test」なら「test_noise_scale(Level1)(x2.000000)」みたいな感じにする std::string addstr("("); addstr += ModelName; addstr += ")"; const std::string &mode = cmdMode.getValue(); addstr += "(" + mode + ")"; if (mode.find("noise") != mode.npos || mode.find("auto_scale") != mode.npos) addstr += "(Level" + std::to_string(cmdNRLevel.getValue()) + ")"; if (use_tta) addstr += "(tta)"; if (mode.find("scale") != mode.npos) { if(ScaleRatio) addstr += "(x" + std::to_string(*ScaleRatio) + ")"; else if (ScaleWidth) addstr += "(width " + std::to_string(*ScaleWidth) + ")"; else addstr += "(height " + std::to_string(*ScaleHeight) + ")"; } if (cmdOutputDepth.getValue() != 8) addstr += "(" + std::to_string(cmdOutputDepth.getValue()) + "bit)"; output_path = input_path.branch_path() / (input_path.stem().string() + addstr); } else output_path = cmdOutputFile.getValue(); output_path = boost::filesystem::absolute(output_path); if (!boost::filesystem::exists(output_path)) { if (!boost::filesystem::create_directory(output_path)) { printf("エラー: 出力フォルダ「%s」の作成に失敗しました\n", output_path.string().c_str()); return 1; } } std::vector<std::string> extList; { // input_extention_listを文字列の配列にする typedef boost::char_separator<char> char_separator; typedef boost::tokenizer<char_separator> tokenizer; char_separator sep(":", "", boost::drop_empty_tokens); tokenizer tokens(cmdInputFileExt.getValue(), sep); for (tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter) { std::string ext(*tok_iter); std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower); extList.push_back("." + ext); } } // 変換する画像の入力、出力パスを取得 const auto func = [&extList, &input_path, &output_path, &outputExt, &file_paths](const boost::filesystem::path &path) { BOOST_FOREACH(const boost::filesystem::path& p, std::make_pair(boost::filesystem::recursive_directory_iterator(path), boost::filesystem::recursive_directory_iterator())) { if (boost::filesystem::is_directory(p)) { const auto out_relative = relativePath(p, input_path); const auto out_absolute = output_path / out_relative; if (!boost::filesystem::exists(out_absolute)) { if (!boost::filesystem::create_directory(out_absolute)) { printf("エラー: 出力フォルダ「%s」の作成に失敗しました\n", out_absolute.string().c_str()); return false; } } } else { std::string ext(p.extension().string()); std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower); if (std::find(extList.begin(), extList.end(), ext) != extList.end()) { const auto out_relative = relativePath(p, input_path); const auto out_absolute = output_path / out_relative; const auto out = (out_absolute.branch_path() / out_absolute.stem()).string() + outputExt; file_paths.emplace_back(p.string(), out); } } } return true; }; if (!func(input_path)) return 1; } else {
int main(int argc, char** argv) { // definition of command line arguments TCLAP::CmdLine cmd("waifu2x reimplementation using Caffe", ' ', "1.0.0"); TCLAP::ValueArg<std::string> cmdInputFile("i", "input_path", "path to input image file", true, "", "string", cmd); TCLAP::ValueArg<std::string> cmdOutputFile("o", "output_path", "path to output image file (when input_path is folder, output_path must be folder)", false, "(auto)", "string", cmd); TCLAP::ValueArg<std::string> cmdInputFileExt("l", "input_extention_list", "extention to input image file when input_path is folder", false, "png:jpg:jpeg:tif:tiff:bmp", "string", cmd); TCLAP::ValueArg<std::string> cmdOutputFileExt("e", "output_extention", "extention to output image file when output_path is (auto) or input_path is folder", false, "png", "string", cmd); std::vector<std::string> cmdModeConstraintV; cmdModeConstraintV.push_back("noise"); cmdModeConstraintV.push_back("scale"); cmdModeConstraintV.push_back("noise_scale"); cmdModeConstraintV.push_back("auto_scale"); TCLAP::ValuesConstraint<std::string> cmdModeConstraint(cmdModeConstraintV); TCLAP::ValueArg<std::string> cmdMode("m", "mode", "image processing mode", false, "noise_scale", &cmdModeConstraint, cmd); std::vector<int> cmdNRLConstraintV; cmdNRLConstraintV.push_back(1); cmdNRLConstraintV.push_back(2); TCLAP::ValuesConstraint<int> cmdNRLConstraint(cmdNRLConstraintV); TCLAP::ValueArg<int> cmdNRLevel("n", "noise_level", "noise reduction level", false, 1, &cmdNRLConstraint, cmd); TCLAP::ValueArg<double> cmdScaleRatio("s", "scale_ratio", "custom scale ratio", false, 2.0, "double", cmd); TCLAP::ValueArg<std::string> cmdModelPath("", "model_dir", "path to custom model directory (don't append last / )", false, "models", "string", cmd); std::vector<std::string> cmdProcessConstraintV; cmdProcessConstraintV.push_back("cpu"); cmdProcessConstraintV.push_back("gpu"); cmdProcessConstraintV.push_back("cudnn"); TCLAP::ValuesConstraint<std::string> cmdProcessConstraint(cmdProcessConstraintV); TCLAP::ValueArg<std::string> cmdProcess("p", "process", "process mode", false, "gpu", &cmdProcessConstraint, cmd); TCLAP::ValueArg<int> cmdCropSizeFile("c", "crop_size", "input image split size", false, 128, "int", cmd); TCLAP::ValueArg<int> cmdBatchSizeFile("b", "batch_size", "input batch size", false, 1, "int", cmd); // definition of command line argument : end TCLAP::Arg::enableIgnoreMismatched(); // parse command line arguments try { cmd.parse(argc, argv); } catch (std::exception &e) { printf("エラー: %s\n", e.what()); return 1; } const boost::filesystem::path input_path(boost::filesystem::absolute((cmdInputFile.getValue()))); std::string outputExt = cmdOutputFileExt.getValue(); if (outputExt.length() > 0 && outputExt[0] != '.') outputExt = "." + outputExt; std::vector<std::pair<std::string, std::string>> file_paths; if (boost::filesystem::is_directory(input_path)) // input_pathがフォルダならそのディレクトリ以下の画像ファイルを一括変換 { boost::filesystem::path output_path; if (cmdOutputFile.getValue() == "(auto)") { // 「test」なら「test_noise_scale(Level1)(x2.000000)」みたいな感じにする std::string addstr("_" + cmdMode.getValue()); const std::string &mode = cmdMode.getValue(); if (mode.find("noise") != mode.npos || mode.find("auto_scale") != mode.npos) addstr += "(Level" + std::to_string(cmdNRLevel.getValue()) + ")"; if (mode.find("scale") != mode.npos) addstr += "(x" + std::to_string(cmdScaleRatio.getValue()) + ")"; output_path = input_path.branch_path() / (input_path.stem().string() + addstr); } else output_path = cmdOutputFile.getValue(); output_path = boost::filesystem::absolute(output_path); if (!boost::filesystem::exists(output_path)) { if (!boost::filesystem::create_directory(output_path)) { printf("エラー: 出力フォルダ「%s」の作成に失敗しました\n", output_path.string().c_str()); return 1; } } std::vector<std::string> extList; { // input_extention_listを文字列の配列にする typedef boost::char_separator<char> char_separator; typedef boost::tokenizer<char_separator> tokenizer; char_separator sep(":", "", boost::drop_empty_tokens); tokenizer tokens(cmdInputFileExt.getValue(), sep); for (tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter) extList.push_back("." + *tok_iter); } // 変換する画像の入力、出力パスを取得 const auto func = [&extList, &input_path, &output_path, &outputExt, &file_paths](const boost::filesystem::path &path) { BOOST_FOREACH(const boost::filesystem::path& p, std::make_pair(boost::filesystem::recursive_directory_iterator(path), boost::filesystem::recursive_directory_iterator())) { if (boost::filesystem::is_directory(p)) { const auto out_relative = relativePath(p, input_path); const auto out_absolute = output_path / out_relative; if (!boost::filesystem::exists(out_absolute)) { if (!boost::filesystem::create_directory(out_absolute)) { printf("エラー: 出力フォルダ「%s」の作成に失敗しました\n", out_absolute.string().c_str()); return false; } } } else if (std::find(extList.begin(), extList.end(), p.extension().string()) != extList.end()) { const auto out_relative = relativePath(p, input_path); const auto out_absolute = output_path / out_relative; const auto out = (out_absolute.branch_path() / out_absolute.stem()).string() + outputExt; file_paths.emplace_back(p.string(), out); } } return true; }; if (!func(input_path)) return 1; } else {
int Irc::Session::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: connected(); break; case 1: welcomed(); break; case 2: reconnecting(); break; case 3: disconnected(); break; case 4: bufferAdded((*reinterpret_cast< Irc::Buffer*(*)>(_a[1]))); break; case 5: bufferRemoved((*reinterpret_cast< Irc::Buffer*(*)>(_a[1]))); break; case 6: capabilitiesListed((*reinterpret_cast< const QStringList(*)>(_a[1]))); break; case 7: capabilitiesAcked((*reinterpret_cast< const QStringList(*)>(_a[1]))); break; case 8: capabilitiesNotAcked((*reinterpret_cast< const QStringList(*)>(_a[1]))); break; case 9: msgJoined((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 10: msgParted((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 11: msgQuit((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 12: msgNickChanged((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 13: msgModeChanged((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3])),(*reinterpret_cast< const QString(*)>(_a[4]))); break; case 14: msgTopicChanged((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 15: msgInvited((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 16: msgKicked((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3])),(*reinterpret_cast< const QString(*)>(_a[4]))); break; case 17: msgMessageReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 18: msgNoticeReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 19: msgCtcpRequestReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 20: msgCtcpReplyReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 21: msgCtcpActionReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 22: msgNumericMessageReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< uint(*)>(_a[2])),(*reinterpret_cast< const QStringList(*)>(_a[3]))); break; case 23: msgUnknownMessageReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QStringList(*)>(_a[2]))); break; case 24: connectToServer((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< quint16(*)>(_a[2]))); break; case 25: connectToServer((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 26: connectToServer(); break; case 27: reconnectToServer(); break; case 28: disconnectFromServer(); break; case 29: { bool _r = raw((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 30: { bool _r = motd(); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 31: { bool _r = join((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 32: { bool _r = join((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 33: { bool _r = part((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 34: { bool _r = part((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 35: { bool _r = quit((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 36: { bool _r = quit(); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 37: { bool _r = names((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 38: { bool _r = list((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 39: { bool _r = list(); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 40: { bool _r = whois((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 41: { bool _r = whowas((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 42: { bool _r = mode((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 43: { bool _r = mode((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 44: { bool _r = topic((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 45: { bool _r = topic((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 46: { bool _r = invite((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 47: { bool _r = kick((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 48: { bool _r = kick((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 49: { bool _r = message((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 50: { bool _r = notice((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 51: { bool _r = ctcpAction((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 52: { bool _r = ctcpRequest((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 53: { bool _r = ctcpReply((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 54: requestCapabilities((*reinterpret_cast< const QStringList(*)>(_a[1]))); break; case 55: clearCapabilities(); break; case 56: { bool _r = sendRaw((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 57: { bool _r = cmdJoin((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 58: { bool _r = cmdJoin((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 59: { bool _r = cmdPart((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 60: { bool _r = cmdPart((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 61: { bool _r = cmdQuit((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 62: { bool _r = cmdQuit(); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 63: { bool _r = cmdNames((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 64: { bool _r = cmdList((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 65: { bool _r = cmdList(); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 66: { bool _r = cmdWhois((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 67: { bool _r = cmdMode((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 68: { bool _r = cmdMode((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 69: { bool _r = cmdTopic((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 70: { bool _r = cmdTopic((*reinterpret_cast< const QString(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 71: { bool _r = cmdInvite((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 72: { bool _r = cmdKick((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 73: { bool _r = cmdKick((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 74: { bool _r = cmdMessage((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 75: { bool _r = cmdNotice((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 76: { bool _r = cmdCtcpAction((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 77: { bool _r = cmdCtcpRequest((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 78: { bool _r = cmdCtcpReply((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 79: d_func()->_q_connected(); break; case 80: d_func()->_q_disconnected(); break; case 81: d_func()->_q_reconnect(); break; case 82: d_func()->_q_error(); break; case 83: d_func()->_q_state((*reinterpret_cast< QAbstractSocket::SocketState(*)>(_a[1]))); break; case 84: d_func()->_q_readData(); break; case 85: d_func()->_q_joined((*reinterpret_cast< const QString(*)>(_a[1]))); break; case 86: d_func()->_q_parted((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 87: d_func()->_q_quit((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 88: d_func()->_q_nickChanged((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 89: d_func()->_q_modeChanged((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 90: d_func()->_q_topicChanged((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 91: d_func()->_q_invited((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 92: d_func()->_q_kicked((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3]))); break; case 93: d_func()->_q_messageReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 94: d_func()->_q_noticeReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 95: d_func()->_q_ctcpRequestReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 96: d_func()->_q_ctcpReplyReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 97: d_func()->_q_ctcpActionReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; case 98: d_func()->_q_numericMessageReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< uint(*)>(_a[2])),(*reinterpret_cast< const QStringList(*)>(_a[3]))); break; case 99: d_func()->_q_unknownMessageReceived((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QStringList(*)>(_a[2]))); break; default: ; } _id -= 100; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< QStringList*>(_v) = autoJoinChannels(); break; case 1: *reinterpret_cast< int*>(_v) = autoReconnectDelay(); break; case 2: *reinterpret_cast< QByteArray*>(_v) = encoding(); break; case 3: *reinterpret_cast< QString*>(_v) = host(); break; case 4: *reinterpret_cast< QString*>(_v) = ident(); break; case 5: *reinterpret_cast< QString*>(_v) = nick(); break; case 6: *reinterpret_cast<int*>(_v) = QFlag(options()); break; case 7: *reinterpret_cast< QString*>(_v) = password(); break; case 8: *reinterpret_cast< quint16*>(_v) = port(); break; case 9: *reinterpret_cast< QString*>(_v) = realName(); break; case 10: *reinterpret_cast< QStringList*>(_v) = supportedCapabilities(); break; case 11: *reinterpret_cast< QStringList*>(_v) = enabledCapabilities(); break; } _id -= 12; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setAutoJoinChannels(*reinterpret_cast< QStringList*>(_v)); break; case 1: setAutoReconnectDelay(*reinterpret_cast< int*>(_v)); break; case 2: setEncoding(*reinterpret_cast< QByteArray*>(_v)); break; case 3: setHost(*reinterpret_cast< QString*>(_v)); break; case 4: setIdent(*reinterpret_cast< QString*>(_v)); break; case 5: setNick(*reinterpret_cast< QString*>(_v)); break; case 6: setOptions(QFlag(*reinterpret_cast<int*>(_v))); break; case 7: setPassword(*reinterpret_cast< QString*>(_v)); break; case 8: setPort(*reinterpret_cast< quint16*>(_v)); break; case 9: setRealName(*reinterpret_cast< QString*>(_v)); break; } _id -= 12; } else if (_c == QMetaObject::ResetProperty) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 12; } #endif // QT_NO_PROPERTIES return _id; }
int main(int argc, char** argv) { // definition of command line arguments TCLAP::CmdLine cmd("waifu2x reimplementation using OpenCV", ' ', "1.0.0"); TCLAP::ValueArg<std::string> cmdInputFile("i", "input_file", "path to input image file (you should input full path)", true, "", "string", cmd); TCLAP::ValueArg<std::string> cmdOutputFile("o", "output_file", "path to output image file (you should input full path)", false, "(auto)", "string", cmd); std::vector<std::string> cmdModeConstraintV; cmdModeConstraintV.push_back("noise"); cmdModeConstraintV.push_back("scale"); cmdModeConstraintV.push_back("noise_scale"); TCLAP::ValuesConstraint<std::string> cmdModeConstraint(cmdModeConstraintV); TCLAP::ValueArg<std::string> cmdMode("m", "mode", "image processing mode", false, "noise_scale", &cmdModeConstraint, cmd); std::vector<int> cmdNRLConstraintV; cmdNRLConstraintV.push_back(1); cmdNRLConstraintV.push_back(2); TCLAP::ValuesConstraint<int> cmdNRLConstraint(cmdNRLConstraintV); TCLAP::ValueArg<int> cmdNRLevel("", "noise_level", "noise reduction level", false, 1, &cmdNRLConstraint, cmd); TCLAP::ValueArg<double> cmdScaleRatio("", "scale_ratio", "custom scale ratio", false, 2.0, "double", cmd); TCLAP::ValueArg<std::string> cmdModelPath("", "model_dir", "path to custom model directory (don't append last / )", false, "models", "string", cmd); TCLAP::ValueArg<int> cmdNumberOfJobs("j", "jobs", "number of threads launching at the same time", false, 4, "integer", cmd); // definition of command line argument : end // parse command line arguments try { cmd.parse(argc, argv); } catch (std::exception &e) { std::cerr << e.what() << std::endl; std::cerr << "Error : cmd.parse() threw exception" << std::endl; std::exit(-1); } // load image file cv::Mat image = cv::imread(cmdInputFile.getValue(), cv::IMREAD_COLOR); image.convertTo(image, CV_32F, 1.0 / 255.0); // set number of jobs for processing models w2xc::modelUtility::getInstance().setNumberOfJobs(cmdNumberOfJobs.getValue()); // ===== Noise Reduction Phase ===== if (cmdMode.getValue() == "noise" || cmdMode.getValue() == "noise_scale") { std::string modelFileName(cmdModelPath.getValue()); modelFileName = modelFileName + "/noise" + std::to_string(cmdNRLevel.getValue()) + "_model.json"; std::vector<std::unique_ptr<w2xc::Model> > models; if (!w2xc::modelUtility::generateModelFromJSON(modelFileName, models)) std::exit(-1); cv::Mat imageYUV; cv::cvtColor(image, imageYUV, cv::COLOR_RGB2YUV); std::vector<cv::Mat> imageSplit; cv::Mat imageY; cv::split(imageYUV, imageSplit); imageSplit[0].copyTo(imageY); w2xc::convertWithModels(imageY, imageSplit[0], models); cv::merge(imageSplit, imageYUV); cv::cvtColor(imageYUV, image, cv::COLOR_YUV2RGB); } // noise reduction phase : end // ===== scaling phase ===== if (cmdMode.getValue() == "scale" || cmdMode.getValue() == "noise_scale") { // calculate iteration times of 2x scaling and shrink ratio which will use at last int iterTimesTwiceScaling = static_cast<int>(std::ceil( std::log2(cmdScaleRatio.getValue()))); double shrinkRatio = 0.0; if (static_cast<int>(cmdScaleRatio.getValue()) != std::pow(2, iterTimesTwiceScaling)) { shrinkRatio = cmdScaleRatio.getValue() / std::pow(2.0, static_cast<double>(iterTimesTwiceScaling)); } std::string modelFileName(cmdModelPath.getValue()); modelFileName = modelFileName + "/scale2.0x_model.json"; std::vector<std::unique_ptr<w2xc::Model> > models; if (!w2xc::modelUtility::generateModelFromJSON(modelFileName, models)) std::exit(-1); std::cout << "start scaling" << std::endl; // 2x scaling for (int nIteration = 0; nIteration < iterTimesTwiceScaling; nIteration++) { std::cout << "#" << std::to_string(nIteration + 1) << " 2x scaling..." << std::endl; cv::Mat imageYUV; cv::Size imageSize = image.size(); imageSize.width *= 2; imageSize.height *= 2; cv::Mat image2xNearest; cv::resize(image, image2xNearest, imageSize, 0, 0, cv::INTER_NEAREST); cv::cvtColor(image2xNearest, imageYUV, cv::COLOR_RGB2YUV); std::vector<cv::Mat> imageSplit; cv::Mat imageY; cv::split(imageYUV, imageSplit); imageSplit[0].copyTo(imageY); // generate bicubic scaled image and // convert RGB -> YUV and split imageSplit.clear(); cv::Mat image2xBicubic; cv::resize(image,image2xBicubic,imageSize,0,0,cv::INTER_CUBIC); cv::cvtColor(image2xBicubic, imageYUV, cv::COLOR_RGB2YUV); cv::split(imageYUV, imageSplit); if(!w2xc::convertWithModels(imageY, imageSplit[0], models)){ std::cerr << "w2xc::convertWithModels : something error has occured.\n" "stop." << std::endl; std::exit(1); }; cv::merge(imageSplit, imageYUV); cv::cvtColor(imageYUV, image, cv::COLOR_YUV2RGB); } // 2x scaling : end if (shrinkRatio != 0.0) { cv::Size lastImageSize = image.size(); lastImageSize.width = static_cast<int>(static_cast<double>(lastImageSize.width * shrinkRatio)); lastImageSize.height = static_cast<int>(static_cast<double>(lastImageSize.height * shrinkRatio)); cv::resize(image, image, lastImageSize, 0, 0, cv::INTER_LINEAR); } } image.convertTo(image, CV_8U, 255.0); std::string outputFileName = cmdOutputFile.getValue(); if (outputFileName == "(auto)") { outputFileName = cmdInputFile.getValue(); int tailDot = outputFileName.find_last_of('.'); outputFileName.erase(tailDot, outputFileName.length()); outputFileName = outputFileName + "(" + cmdMode.getValue() + ")"; std::string &mode = cmdMode.getValue(); if(mode.find("noise") != mode.npos){ outputFileName = outputFileName + "(Level" + std::to_string(cmdNRLevel.getValue()) + ")"; } if(mode.find("scale") != mode.npos){ outputFileName = outputFileName + "(x" + std::to_string(cmdScaleRatio.getValue()) + ")"; } outputFileName += ".png"; } cv::imwrite(outputFileName, image); std::cout << "process successfully done!" << std::endl; return 0; }