OpenCV&OCR简单识别图片表格数据

在很多时候,我们的数据来源形式是多种多样的,有时候数据(或表格)也会呈现在图片中。那么,我们如何来获取图片中的有用数据呢?当一张图片中含有表格数据的时候,我们可以用OpenCV识别表格中的直线,然后再用OCR技术识别其中的文字。 本文仅作为如何识别图片中的表格的一个例子,希望能给读者一些启示。笔者用到的工具如下: opencv pyteressact numpy 我们用opencv来识别表格中的直线,用pyteressact来识别单元格文字,用numpy做数值处理。我们要识别的示例图片(AI.png)如下: 示例图片 AI.png 我们分以下几步进行识别: 识别表格中的横线,即分割记录(每一行)的横线; 识别表格中的竖线,即每个列的分割线; 找到数据所在的单元格; 利用pyteressact识别单元格的文字。 识别表格中的横线 识别横线之前,我们先创建一个图片表格识别类(ImageTableOCR),如下: # -*- coding: utf-8 -*-import cv2import pytesseractimport numpy as npclass ImageTableOCR(object): # 初始化 def __init__(self, ImagePath): # 读取图片 self.image = cv2.imread(ImagePath, 1) # 把图片转换为灰度模式 self.gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY) 其中self.image为RGB模块的图片,self.gray为灰度模式的图片。 接下来,我们识别图片中的分割两条记录的横线。注意到,相邻两条记录之间的颜色是不一致的,因此,我们利用图片灰度化后,每一行像素的平均值的差的绝对值来作为相邻两条记录的分割线,这样就能检测出分割两条记录的横线了。具体的识别横线的函数的Python代码如下:(接以上代码) # 横向直线检测 def HorizontalLineDetect(self): # 图像二值化 ret, thresh1 = cv2.threshold(self.gray, …

Java 模拟同时并发请求

有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了。 java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了。但是,这种请求,一般会存在启动的先后顺序了,算不得真正的同时并发!怎么样才能做到真正的同时并发呢?是本文想说的点,java中提供了闭锁 CountDownLatch, 刚好就用来做这种事就最合适了。 只需要: 开启n个线程,加一个闭锁,开启所有线程; 待所有线程都准备好后,按下开启按钮,就可以真正的发起并发请求了。 package com.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.concurrent.CountDownLatch;public class LatchTest { public static void main(String[] args) throws InterruptedException { Runnable taskTemp = new Runnable() {       // 注意,此处是非线程安全的,留坑 private int iCounter; @Override public void run() { for(int i = 0; i < 10; i++) { // 发起请求// …

Setting up a Node development environment 配置更新NodeJS和NPM环境

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/development_environment Installing NodeSection In order to use Express you will first have to install Nodejs and the Node Package Manager (NPM) on your operating system. The following sections explain the easiest way to install the Long Term Supported (LTS) version of Nodejs on Ubuntu Linux 16.04, macOS, and Windows 10. Tip: The sections below show the easiest way to install Node and NPM on our target OS platforms. …

Protected: ngrok

There is no excerpt because this is a protected post.

古籍记载中“太阳从西边升起”的奇观

据中国春秋战国时期的魏国史书《竹书纪年》记载:“(周)懿王元年,天再旦于郑”。这记载了当年在中国古代“郑地”(今在陕西省华县)所发生的一种奇异的天文现象,这不单是指在一天之中“天再旦”即“太阳升起了两次”的异常现象,并且因着观察者所处的地理位置,事实上,这是记载了一次“太阳从西边升起”的重大事件。鉴于魏国的首都大梁的原址在现在的河南省开封市,古代的“郑地”恰恰是位于魏国以西,魏国人生活在郑地的东方,在所观察到的两次“日出”中,第一次日出是属于正常的常规日出,而第二次日出则是“太阳从西方升起”的罕见情形。然而,魏国人又何以能看见西方“郑地”上有日出的罕见现象呢?这究竟是否真实呢? 俗话中,常用“太阳从西边升起”来形容世上所不可能发生的事情。然而,中国古人却记载了这样一个令人感到不可思议 的异常现象,这意味着太阳曾相对于地球发生了“倒行”,即是记载了一次“夕阳从西边升起”的奇迹。难道说,太阳真的能从西方升起吗?在世界历史上,还有谁曾经记载了太阳“倒行”的奇事呢?确实是有,以色列人就曾将这样一个奇事记载在《圣经》里。《圣经》揭示了“(周)懿王元年,天再旦于郑”的奇观之由来。 据以色列历史记载,上帝曾经使得日晷本向前行的影子,硬是往后退了十度。这就意味太阳相对于地球,曾发生过“倒行”。 Isa 38:7 我耶和华必成就我所说的,我先给你一个兆头。Isa 38:8 就是叫亚哈斯的日晷,向前进的日影往后退十度。于是前进的日影,果然在日晷上往后退了十度。 上帝行这等奇事的时候,正是在公元前 701年之际,当时,亚述国对南国犹大的首都耶路撒冷进行了围攻,并想如法炮制,就象以前曾在公元前722年之际,用灭亡北国以色列一样的方式,来灭亡南国犹大。亚述军队在围城下不断辱骂上帝,当时,上帝耶和华从天上差遣灭命的天使,在一夜之间,灭绝了亚述国围困耶路撒冷的军队共18万五千人,从而使得亚述远征军实力丧失殆尽,从此,亚述国变得一蹶不振。亚述国攻占南国犹大首都的意图就这样被上帝所破灭了,不料,此时固守首都耶路撒冷的犹大王——希西家也病入膏肓了。先知以赛亚向希西家转告了上帝耶和华的话语,上帝耶和华如此说:“你当留遗命与你的家,因为你必死,不能活了。”,希西家知道自己的阳寿就要到期了,于是痛哭祷告上帝,上帝念希西家曾行了很多善事,又看到了他的眼泪,于是,就给希西家增添了15年的阳寿,并承诺希西家三日后就必可以去上帝的圣殿。此时,本是病得要死的希西家不敢相信这是真的,要求神给一个兆头,于是,在先知的祷告下,上帝为希西家应验了这个令人感到不可思议的天象奇观,即是使得日晷本向前行的影子硬是往后退了十度。 请注意,上帝使得日晷本向前行的影子硬是往后退了十度,这十度代表的时区间隔应该是40分钟,这就意味着太阳相对于地球,发生了“倒行”,其结果有两个: 1、就是使得地球上的某个刚刚发生破晓的地区,初出地平线的太阳在一瞬间里,又降了下去,约40分钟后,才又一次重新从地平线上冉冉升起。其结果就必要使得世上的某地发生在一天之内有两次日出的天文奇观。 2、 当这天文奇观发生之时,在地球上,也必有某个区域,当地人们会发现本地区正处在日落西山、夕阳西下的过程中,一片漆黑。突然,本应该是夕阳西下的太阳,在骤然间变得一反常态,突然又从西方地平线上“跳升”出来,即发生了“夕阳西升”的反常景象,使得当地变得一片光明,并经过40分钟之后,才再一次日落西山。“郑地”位于魏国西方的,发生了“天再旦”这样一个反常现象,不正是应验了太阳从西方升起了吗? 中国古代的“郑地”是位于战国七雄之一的魏国以西的,魏国人向位于其西边的“郑地”望去,看到在“郑地”发生了“天再旦于郑”这样一个反常现象,这不正是证明了在那个时分,出现了令人感到不可思议的“太阳从西方升起”的奇事了吗? 只要是太阳从地平线上重新升起,无论是上面两种情况之一,都是可以视作为“天再旦”。中国古代时的“郑地”正是位于魏国的西边,当时,位于东方的魏国人,目睹了在位于其西边的郑地方向上,发生了“天再旦”这样一个反常现象,这惟有一种解释,就是证明了太阳在当时相对于地球,发生了“倒行”。 很显然,在第2种情况下,是最为符合魏国史书《竹书纪年》所记载“(周)懿王元年,天再旦于郑”的情况。这就是一次典型的“太阳从西边升起”的事件。这就使得令史学界感到扑簌迷离的“周懿王元年”几乎完美地对应于公元前701年。 以上就是对“(周)懿王元年,天再旦于郑”的完美解释! 而且我们可以从《圣经》中得出以下结论: “懿王元年天再旦于郑”这一现象发生的年代应该是公元前701年。 据 《圣经》记载,在以色列历史上,上帝耶和华曾在以色列行过多次扭转日、月乾坤的奇迹,神不单是曾经使得“日晷本向前行的影子硬是往后退了十度”这等奇迹, 并且施展过使得“日头在午间落下”的奇事,最让人叹为观止的是上帝耶和华曾使得日、月在以色列当地的上空悬停,止住,时间延续达一天之久。 目前中外研究机构普遍都采用现代科技手段,借助电脑和天文软件,对古代所发生日食等天文现象,进行在时间上的精确推算。据中外学者推算,将“(周)懿王元 年,天再旦于郑”这一天文记载,归结为早在公元前899年或公元前926年之际,于中国古代“郑地”(今在陕西凤翔县或华阴县境内)所发生的一次“日全食”。 “天再旦”普遍被当今中外研究者们解释为一次“日全食”。即在中国古代“郑地”(今在陕西凤翔县或华阴县境内)的某一天临晨之际, 所碰巧发生的一次“日全食”。其实,这样的解释是不能让人信服的,这并不符合中国人对于日食的习惯用语。中国历史对日食现象的记载,早在西周之前,就已经 具有非常悠久的历史,并通常习惯于用“日有食之”的字句,来记载所发生的日食现象,而不是用“天再旦”这般非同寻常的字眼来记载日食。 “旦” 字从字面上为甲骨文字形,意思是象太阳从地面刚刚升起的样子。“懿王元年天再旦于郑”,也分明是说明太阳在一天里曾升起了两次,而不仅仅是指着天“亮了” 两次而言的。所以,如果人们以当地发生“日食”来解释古籍中所记载的“天再旦”这样天文现象,这无疑是一种非常牵强附会的做法。这样的解释就将“旦”字在 本意上含义,都进行了严重的篡改和扭曲。 在世界历史上,上帝曾以他的大能,一手造成诸多的天文奇观,这绝对是非同小可的。世上的一些凡自称是具有古老文明的国度,面对在公元前701年之际,所发生的巨大的天象变异时,也绝对不会都对此视而不见。因为这是一个全球性的重大事件, 这也同时是对于全球各个地区文明程度的一种在隐形中的检验。因此,中国古籍《竹书纪年》所记载的“懿王元年天再旦于郑”的史料,就显得弥足珍贵,这无疑是一个惊世骇俗的消息。然而,除了《圣经》对此有记载之外,只有中国古代记载了这等令人类感到不可思议的天象奇观,从这个方面而言,中国古代文明是名不虚传的,这也堪称是中国历史上的骄傲。 转 http://m.kzg.io/gb1S9N