Tesseract OCR for PHP

Tesseract是开源的OCR引擎。Tesseract最初设计用于英文识别,经过改进引擎和训练系统,它能够处理其它语言和UTF-8字符。Tesseract 3.0能够处理任何Unicode字符,但并非在所有语言上都工作得很好。Tesseract在庞大字符集语言(比如中文)上较慢,但是工作良好。

Tesseract需要知道相同字符的不同形状,也就是不同字体。最多允许的字体数量在intproto.h中通过MAX_NUM_CONFIGS定义,目前支持64种。当训练字体数量超过32种时,速度显著下降。

Installation

1.安装依赖

  • autoconf
  • automake
  • libtool
  • libjpeg
  • libpng
  • libtiff
  • zlib
  • libjpeg-devel
  • libpng-devel
  • libtiff-devel
  • zlib-devel

2.安装Leptonica

Leptonica_download

wget http://www.leptonica.org/source/leptonica-1.74.4.tar.gz
tar xzvf leptonica-1.74.4.tar.gz
./configure
make && make install
ldconfig

3.安装Tesseract

wget https://github.com/tesseract-ocr/tesseract/archive/3.05.00.tar.gz
tar xzvf 3.05.00.tar.gz
./autogen.sh
./configure
make && make install
ldconfig

4.安装Tesseract-OCR

wget https://github.com/tesseract-ocr/tessdata/archive/3.04.00.tar.gz
tar xzvf 3.04.00.tar.gz
cp -r tessdata-3.04.00/* /usr/local/share/tessdata

测试

tesseract xxx.png out
cat out.txt

在PHP上运行

composer require thiagoalessio/tesseract_ocr
php index.php

index.php

<?php
	require_once './vendor/autoload.php';

	use thiagoalessio\TesseractOCR\TesseractOCR;
	echo (new TesseractOCR('./text.png'))
	->run();

注意:需编辑php.ini开启exec

获取指定范围内中间值的最接近数

lazy-md-syntax

由图看出条件范围区间0~60,中间值是30,最接近30的数是24

代码

public function NextMiddleNumber($Number,$NumberRangeArray)
{
	$w = 0;
	$c = -1;
	$abstand = 0;
	$middle = ($Number['max']+$Number['min'])/2;
	$l = count($NumberRangeArray);
	for ($pos=0; $pos < $l; $pos++) {
		$n = $NumberRangeArray[$pos]['score'];
		$abstand = ($n > $middle) ? $middle - $n : $n - $middle;
		if ($c == -1) {
			$c = $abstand;
			continue;
		} else if ($abstand > $c) {
			$c = $abstand;
			$w = $pos;
		}
	}
	return $NumberRangeArray[$w];
}

PHPUnit接口自动化测试

lazy-md-syntax lazy-md-syntax

	//初始化
    $ch = curl_init();
    //设置选项,包括URL
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    //执行并获取HTML文档内容
    $output = curl_exec($ch);
    //释放curl句柄
    curl_close($ch);
    return do_GET($url);

PHPUnit

link: https://phpunit.de

PHPUnit安装

wget https://phar.phpunit.de/phpunit-6.2.phar
chmod +x phpunit-6.2.phar
sudo mv phpunit-6.2.phar /usr/local/bin/phpunit
phpunit --version

composer依赖

composer require --dev phpunit/phpunit ^6.3

编写PHPUnit测试

  • 针对类 Class 的测试写在类 ClassTest中。

  • ClassTest(通常)继承自 PHPUnit\Framework\TestCase。

  • 测试都是命名为 test* 的公用方法。 也可以在方法的文档注释块(docblock)中使用 @test 标注将其标记为测试方法。

lazy-md-syntax

Time: 157 ms, Memory: 6.00MB

OK (1 test, 5 assertions)

命令行测试

phpunit ArrayTest
PHPUnit 6.4.0 by Sebastian Bergmann and contributors.

..

Time: 0 seconds


OK (2 tests, 2 assertions)

PHPUnit在当前工作目录中寻找ArrayTest.php文件并加载,对于每个测试运行,PHPunit命令行工具都会输出一个字符显示进展

. 当测试成功时输出

F 当测试运行过程中一个断言失败时输出

E 当测试运行过程中产生一个错误时输出

R 当测试被标记有风险时输出

S 当测试被跳过时输出

I 当测试被标记为不完整或未实现时输出

测试的依赖关系

PHPUnit支持对测试方法之间的显式依赖关系进行声明。这种依赖关系并不是定义在测试方法的执行顺序中,而是允许生产者(producer)返回一个测试基境(fixture)的实例,并将此实例传递给依赖于它的消费者(consumer)们。

  • 生产者(producer),是能生成被测单元并将其作为返回值的测试方法。
  • 消费者(consumer),是依赖于一个或多个生产者及其返回值的测试方法。

lazy-md-syntax

...                                            3 / 3 (100%)
Time: 148 ms, Memory: 6.00MB
OK (3 tests, 5 assertions)

注意事项

  • 默认情况下,生产者所产生的返回值将“原样”传递给相应的消费者。这意味着,如果生产者返回的是一个对象,那么传递给消费者的将是一个指向此对象的引用。如果需要传递对象的副本而非引用,则应当用 @depends clone 替代 @depends。

notadd

详情见官方文档。Notadd 是基于Laravel 和 Vue 的开源PHP框架, 由于其本身的灵活性和先进的技术架构,使得你通过模块(主功能)、插件(功能增强)、模板(前端样式)像搭积木一样组合成你想要的,诸如:商城、CMS、微信、论坛… 快速完成开发。 Notadd 像操作系统一样,你可以通过安装“软件”,成为适用于你的“电脑”。

notadd权限

经过查看了notadd源码了解到它的权限管理流程,核心代码主要集中在

  • /vendor/notadd/framework/src/Permission/Permission.php
  • /vendor/notadd/framework/src/Permission/PermissionManager.php

lazy-md-syntax lazy-md-syntax 调用Permission.php文件下的permission方法 lazy-md-syntax 传入模块权限配置项跟用户组信息调用permissionManager.php文件下的check方法 lazy-md-syntax 先判断传入的模块权限配置项是否在setting表key=permissions的数组里面 然后再判断当前用户组是否在setting设置的模块权限用户组里面

模块权限配置项写在Control控制器里面 lazy-md-syntax