基于视觉注意的张量流光学字符识别模型。

aocr的Python项目详细描述


#基于注意的ocr

用于图像识别的基于视觉注意的ocr模型,以及用于创建tfrecords数据集和将训练后的模型导出为[保存的模型](https://www.tensorflow.org/api-docs/python/tf/saved-model)或冻结图的附加工具。

##致谢

本项目基于[qi guo]和[yuntian deng]的模型(https://github.com/da03)。您可以在[DA03/Attention OCR]存储库(https://github.com/da03/attention-ocr)中找到原始模型。

\高度32,同时保持纵横比)。然后一个LSTM被堆在CNN的上面。最后,注意模型被用作产生最终输出的解码器。

![ocr示例](http://cs.cmu.edu/~yuntiand/ocr-2.jpg)

附加的依赖项是"pil `/'should`"、"distance"和"six"。


您需要一组图像和一个带有各自标签的注释文件。

```
aocr数据集./datasets/annotations-training.txt./datasets/training.tfrecords
aocr数据集./datasets/annotations-testing.txt./datasets/testing.tfrecords
```

包含图像路径(绝对或相对于工作目录)及其相应标签的简单文本文件:

```
datasets/images/hello.jpg hello
datasets/images/world.jpg world
````

./datasets/training.tfrecords
```

注意,要达到一致需要相当长的时间,因为我们同时训练CNN和注意力模型。

`--steps per checkpoint`参数确定保存模型检查点的频率(默认输出目录是'checkpoints/`)。

**重要:**有很多可用的训练选项。请参阅cli帮助或本自述文件的"参数"部分。


\您可以可视化测试期间的注意力结果(默认保存为"out/"):

````
aocr测试--可视化./datasets/testing.tfrecords
````


示例输出"results/correct"中的图像:

image 0(j/j):

![示例图像0](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_0.jpg)


image 1(u/u):

![示例图像1](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_1.jpg)


图像2(n/n):

![示例图像2](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_2.jpg)


图像3(g/g):

![示例图像3](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_3.jpg)


图像4(l/l):

![示例图像4](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_4.jpg)


图像5(e/e):

![示例图像5](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_word_370.png/image_5.jpg)


它可以导出为冻结图或保存模型。

``bash

aocr导出。/导出模型

将模型放入`./exported model`目录中。


使用[tensorflow service]的tp rest api(https://github.com/tensorflow/service)。可以通过运行以下命令启动服务器:

```
tensorflow_model_server--port=9000--rest_api_port=9001--model_name=yourmodelname--model_base_path=。/导出的model
````

**注意**:tensorflow_model_server需要一个子目录,其版本号为显示上一步中导出的文件并将其放在其中。因此,您需要手动将"导出模型"的内容移动到"导出模型/1"。

例如:

```
curl-x post\
http://localhost:9001/v1/models/aocr:predict\
-h'缓存控制:无缓存'\
-h'内容类型:application/json'\
-d'{
"签名名称":"服务于默认值",
"输入":{
"输入":{"b64":"<;编码为base64>;"}
}
}
}
```







将训练数据集放入google云存储桶中,并使用"gcloud"工具开始一项训练工作。

1。设置环境变量:

```
gs_bucket="gs://aocr bucket"

上传训练数据集:

```
gsutil cp./datasets/training.tfrecords$gs_bucket/$dataset_upload_path
```

>3。启动ml引擎作业:

```
立即导出=$(日期+%y%m%d%h%m%s)
导出作业=$job前缀$now"
导出作业目录=$gs_bucket/$job名称"

gcloud ml引擎作业提交培训$job名称\
--作业目录=$job_目录\
--模块名称=aocr \
--包路径=aocr \
--region=$region \
--scale tier=basic\u gpu \
--运行时版本=1.2 \
--br/>train$gs\u bucket/$dataset\u upload\u path \
--每个检查点的步数=500 \
--批处理大小=512 \
--num epoch=20
`````

##参数




*`日志路径`:日志文件的路径。














*`格式`:导出的格式格式(savedmodel或frofrozenggraph`).

` ``可视化` `:输出原始图像上的注意地图。






###training

*`steps per checkpoint`:checkpoint(打印困惑,保存模型)每多少步
*`num epoch`:整个数据通过的次数。
*`batch size`:batch size。
*`initial learning rate`:initial learning rate,注意我们使用的是adadelta,所以初始值无关紧要。
*`target embedding size`:每个目标的嵌入维度。
*`attn num hidden`:注意解码器单元中的隐藏单元数。
*`attn num layers`:注意解码器单元中的层数。(隐藏单元的编码器编号将为"attn num hidden"*"attn num layers")。
*"no resume":即使存在检查点,也创建新权重。
*"max gradient norm":将渐变剪裁到此norm。
*"no gradient clipping":不执行渐变剪裁。
*"gpu id":gpu to使用。
*`use gru`:使用gru单元格而不是lstm。
*`max width`:输入图像的最大宽度。警告:宽度大于最大值的图像将被丢弃。
*`max height`:输入图像的最大高度。
*`max prediction`:最大长度预测单词/短语的第个。

ocr)(https://github.com/da03/torch attention ocr)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于测试失败,java testcontainers maven构建失败   java实现jacobi算法实现laplace方程   java中的多线程:如何在不等待所有线程使用ExecutorService完成任务的情况下终止所有线程的执行?   java Hello World不在Android Studio 3中工作   ubuntu Tomcat7的Java版本不正确   java Javafx内存泄漏   对于手动实现的Spring数据存储库方法,我应该使用Java8默认方法吗?   googleappengine中的java添加过滤查询   html当使用JSOUP库在Java中读取标签时,如何保留标签(如<br>、<ul>、<li>、<p>等)的含义?   编码为什么jasper生成的报告在Java中不显示西里尔语(保加利亚语)?   java有没有办法隐藏当前位置和jdk动作?   java找出编译原型文件的版本   有没有办法在运行时更改java方法的访问修饰符?   语法字符串。。。Java中的参数   java数组元素在添加其他元素时会相互覆盖   eclipse中的java GWT项目   java如何为spring rest模板请求将动态json属性名映射到jackson   java无法在Windows 10上找到特定的JDK   在xml字符串和java字符串之间提取正则表达式子字符串