1

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

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

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

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

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

我可以将百日草用于像英语这样的拉丁字母吗?我在谷歌上看到的只有日语用法示例。这是 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;
}

谢谢。

4

1 回答 1

1

百日草通常不需要个人培训。但是,它对于具有更多笔画的字符表现更好,因此将它用于基于拉丁字母的字母可能不会给您最好的结果。它还取决于正确的笔顺,所以如果你用一种写“A”的方式训练它,而使用它的人用另一种方式写它,它可能不会被识别。

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

我相信样本训练集包含拉丁字母和数字,因此您可以删除所有日文字符并对其进行训练以进行测试。(使用较小的模型文件会更快)。

于 2011-08-25T04:48:23.167 回答