Я пытаюсь написать простую программу для распознавания некоторых простых шаблонов. С тессерактом работает нормально, но по какой-то причине не работает с Hmm
, Вот пример кода:
std::string image_path = "assets/ubuntu.png";
std::string filename = "assets/OCRHMM_transitions_table.xml";
auto image_source = cv::imread(image_path);
cv::Mat image;
cv::cvtColor(image_source, image, 6);
cv::Mat transition_p;
cv::FileStorage fs(filename, cv::FileStorage::READ);
fs["transition_probabilities"] >> transition_p;
fs.release();
cv::Mat emission_p = cv::Mat::eye(62,62,CV_64FC1);
std::string voc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
auto classifier = cv::text::loadOCRHMMClassifierNM("assets/OCRHMM_knn_model_data.xml.gz");
auto ocr = cv::text::OCRHMMDecoder::create(classifier, voc, transition_p, emission_p);
std::string output;
std::vector<cv::Rect> boxes;
std::vector<std::string> words;
std::vector<float> confidences;
ocr.get()->run(image, output, &boxes, &words, &confidences);
std::cout << output;
и образец изображения:
Ожидаемый результат: uBuntu
Фактический вывод: m
Что не так с этим кодом? Я просто пытался принять демонстрационный образец.
Вот OCRHMM_transitions_table.xml а также OCRHMM_knn_model_data.xml.gz который был использован (на самом деле я тоже взял их из этого образца).
OpenCV версия 3.4.0
Классификатор Каскада выглядит недостаточно обученным. Почему вы не используете другой классификатор? Он обнаруживает половину
Других решений пока нет …