关于手写识别的几个问题

时间:2011-08-24 14:28:56

标签: c++ handwriting

您是否建议百日草手写识别? 我搜索并找到了一些图书馆,但其中一些图书馆需要对每个不同的人的手写作进行培训。百日草是否需要针对每种不同的手写作进行培训? 我读了它的网站,但无法找到。

此外,我需要一个C ++库,我可以找到一些可以使用C或Java访问。

还有一个问题,文档中没有答案:

  character->add(0, 51, 29);

上面定义的是什么,51和29是什么。

我可以将zinnia用于像英语这样的拉丁字母,我只在google上看到日语用法示例。 以下是zinnia网站上的示例代码:

#include <iostream>
#include "zinnia.h"

int main(int argc, char **argv) {
  zinnia::Recognizer *recognizer = zinnia::Recognizer::create();
  if (!recognizer->open("/usr/local/lib/zinnia/model/tomoe/handwriting-ja.model")) {
    std::cerr << recognizer->what() << std::endl;
    return -1;
  }

  zinnia::Character *character = zinnia::Character::create();
  character->clear();
  character->set_width(300);
  character->set_height(300);
  character->add(0, 51, 29);
  character->add(0, 117, 41);
  character->add(1, 99, 65);
  character->add(1, 219, 77);
  character->add(2, 27, 131);
  character->add(2, 261, 131);
  character->add(3, 129, 17);
  character->add(3, 57, 203);
  character->add(4, 111, 71);
  character->add(4, 219, 173);
  character->add(5, 81, 161);
  character->add(5, 93, 281);
  character->add(6, 99, 167);
  character->add(6, 207, 167);
  character->add(6, 189, 245);
  character->add(7, 99, 227);
  character->add(7, 189, 227);
  character->add(8, 111, 257);
  character->add(8, 189, 245);

  zinnia::Result *result = recognizer->classify(*character, 10);
  if (!result) {
     std::cerr << recognizer->what() << std::endl;
     return -1;
  }
  for (size_t i = 0; i < result->size(); ++i) {
    std::cout << result->value(i) << "\t" << result->score(i) << std::endl;
  }
  delete result;

  delete character;
  delete recognizer;

  return 0;
}

感谢。

1 个答案:

答案 0 :(得分:1)

百日草通常不需要个人训练。但是,对于具有更多笔划的字符,它表现更好,因此将其用于基于拉丁语的字母表可能无法为您提供最佳效果。它也取决于正确的笔划顺序,所以如果你用一种方式训练'A',而使用它的人以另一种方式写它,它可能无法被识别。

add()的参数是点数x,y。它具有Perl,Ruby和Python的绑定以及本机C / C ++接口。编写JNI包装器非常简单,因此也可以从Java中使用它。

我相信样本训练集有拉丁字母和数字,所以你可以删除所有日文字符并训练它来进行测试。 (使用较小的模型文件会快得多)。