Tools
首页
画图
音乐
采集
记事
博客
实验室
登录
lypeng
146
文章
11
分类
46
记事
分类
生活-[23]
Linux-[24]
前端-[9]
数据库-[16]
PHP-[31]
git-[7]
其他-[6]
python-[20]
算法-[4]
React-Native-[4]
中草药-[2]
广告位1
广告位2
首页
/ PHP
返回列表
PHP图像识别测试
阅读:519
发布:2019-11-20
作者:lypeng
PHP图像识别测试,纯粹为了好玩,无法应用到实际中,对原图要求很严格!必须是固定大小,固定间距的才好识别~ 原理比较简单,把一个图片,我这里是330px*60px,像素化,取每一个像素上的色值,根据一定规律,分为0和1 因为数字是横着排列的,我们要切割开,与样本数据做对比,原代码采用了把图片顺时针旋转90度,然后读出数据做对比~ 因为手机号有11位数字,图片大小330 X 60,即每个数字占 30 X 60的区域,    横着读(将色值转换为0和1),竖着读(方便与样本做对比),判断超过80%或90%相似度,算识别成功,得到结果! 数字做特殊处理,例如加粗,斜体,放大,缩小都会影响识别结果,因为已有样本数据没那么多,所以对原图要求很严格~ 如果用来识别车牌号,应该能完美胜任,车牌号都是固定的尺寸,字母间距~ 实验效果如下:   添加点干扰线,效果就比较差了,不能完整识别~ 如果你有兴趣,可以用PS多做几个img.png图片,测试~ 原文地址:https://www.php.cn/php-weizijiaocheng-399377.html?_blank 代码做些了小调整~ ```php imgPath = $path; } /** * 颜色分离转换... * * 按像素,分隔为,0和1 * @param unknown_type $path * @return unknown */ public function getHec () { $size = getimagesize($this->imgPath); $res = imagecreatefrompng($this->imgPath); for ($i = 0; $i < $size[1]; ++ $i) { for ($j = 0; $j < $size[0]; ++ $j) { $rgb = imagecolorat($res, $j, $i); $rgbarray = imagecolorsforindex($res, $rgb); if ($rgbarray['red'] < 125 || $rgbarray['green'] < 125 || $rgbarray['blue'] < 125) { $data[$i][$j] = 1; } else { $data[$i][$j] = 0; } } } $this->imgSize = $size; $this->hecData = $data; } /** * 颜色分离后的数据横向整理... * * @return unknown */ public function magHorData () { $data = $this->hecData; $size = $this->imgSize; $z = 0; for ($i = 0; $i < $size[1]; ++$i) { if (in_array('1', $data[$i])) { $z ++; for ($j = 0; $j < $size[0]; ++$j) { if ($data[$i][$j] == '1') { $newdata[$z][$j] = 1; } else { $newdata[$z][$j] = 0; } } } } return $this->horData = $newdata; } /** * 整理纵向数据... * * @return unknown */ public function magVerData ($newdata) { for ($i = 0; $i < 330; ++$i) { for ($j = 60; $j > 0; $j--) { $ndata[$i][$j] = @$newdata[$j][$i]; } } $sum = count($ndata); $c = 0; $ndatas = array(); for ($a = 0; $a < $sum; $a ++) { $value = $ndata[$a]; if (in_array(1, $value)) { $ndatas[$c] = $value; $c ++; } elseif (is_array($ndatas)) { $b = $c - 1; if (in_array(1, isset($ndatas[$b]) ? $ndatas[$b] : array() )) { $ndatas[$c] = $value; $c ++; } } } return $this->verData = $ndatas; } /** * 显示电话号码... * * @return unknown */ public function showPhone ($ndatas) { $phone = null; $d = 0; $ndArr = array(); foreach ($ndatas as $key => $val) { if (in_array(1, $val)) { foreach ($val as $k => $v) { @$ndArr[$d] .= $v; } } if (!in_array(1, $val)) { $d ++; } } foreach ($ndArr as $key01 => $val01) { $phone .= $this->initData($val01); } return $phone; } /** * 分离显示... * * @param unknown_type $dataArr */ function drawWH ($dataArr) { echo '
'; $c = ''; if (is_array($dataArr)) { foreach ($dataArr as $key => $val) { foreach ($val as $k => $v) { if ($v == 0) { $c .= "
" . $v . "
"; } else { $c .= $v; } } $c .= "
"; } } echo $c; echo '
'; } /** * 初始数据... * * @param unknown_type $numStr * @return unknown */ public function initData ($numStr) { $result = null; $data = array( 0 => '0000000000000000000000000000000000000 0000000000000111111111100000000000000 0000000011111111111111111111000000000 0000001111111111111111111111111000000 0000111111111111111111111111111100000 0001111111111111111111111111111111000 0011111111000000000000000011111111100 0111111100000000000000000000011111100 0111110000000000000000000000000111110 0111100000000000000000000000000011110 1111000000000000000000000000000011110 1111000000000000000000000000000001111 1111000000000000000000000000000001111 1111000000000000000000000000000001111 1111000000000000000000000000000001111 1111000000000000000000000000000001111 0111100000000000000000000000000011110 0111110000000000000000000000000111110 0011111000000000000000000000001111110 0011111111000000000000000001111111100 0001111111111111111111111111111111000 0000111111111111111111111111111110000 0000001111111111111111111111111100000 0000000011111111111111111111100000000 0000000000001111111111111000000000000', 1 => '0000000000000000000000000000000000000 0000000000000000000000000001111000000 0000000000000000000000000000111000000 0000000000000000000000000000111100000 0000000000000000000000000000111100000 0000000000000000000000000000011110000 0000000000000000000000000000011110000 0000000000000000000000000000001111000 0000000000000000000000000000000111000 1111111111111111111111111111111111100 1111111111111111111111111111111111110 1111111111111111111111111111111111110 1111111111111111111111111111111111111 1111111111111111111111111111111111111 0000000000000000000000000000000000000', 2 => '0000000000000000000000000000000000000 1111110000000000000000000000000000000 1111111110000000000000000000011110000 1111111111000000000000000000001111000 1111111111100000000000000000000111100 1111111111110000000000000000000111100 1111000011111000000000000000000011110 1111000001111100000000000000000011110 1111000000111110000000000000000001110 1111000000011111000000000000000001111 1111000000011111000000000000000001111 1111000000001111100000000000000001111 1111000000000111110000000000000001111 1111000000000011111000000000000001111 1111000000000011111000000000000011111 1111000000000001111100000000000011110 1111000000000000111111000000000111110 1111000000000000011111110000001111110 1111000000000000001111111111111111100 1111000000000000000111111111111111000 1111000000000000000011111111111110000 1111000000000000000000111111111100000 1111000000000000000000000000000000000 1111000000000000000000000000000000000', 3 => '0000000000000000000000000000000000000 0001110000000000000000000000000000000 0011110000000000000000000000000000000 0011110000000000000000000000000111000 0111100000000000000000000000000111100 0111100000000000011110000000000011110 0111000000000000011110000000000011110 1111000000000000011110000000000001110 1111000000000000011110000000000001111 1111000000000000011110000000000001111 1111000000000000011110000000000001111 1111000000000000011110000000000001111 1111000000000000011110000000000001111 0111000000000000111111000000000001111 0111100000000000111011100000000011110 0111110000000001111011100000000111110 0111110000000001111011111000011111110 0011111100000111110001111111111111100 0001111111111111110000111111111111100 0001111111111111100000011111111111000 0000011111111111000000001111111100000 0000001111111110000000000000000000000 0000000000100000000000000000000000000', 4 => '0000000000000000000000000000000000000 0000000001111000000000000000000000000 0000000001111100000000000000000000000 0000000001111110000000000000000000000 0000000001111111000000000000000000000 0000000001111111110000000000000000000 0000000001111111111000000000000000000 0000000001111011111100000000000000000 0000000001111000111111000000000000000 0000000001111000011111100000000000000 0000000001111000001111110000000000000 0000000001111000000011111100000000000 0000000001111000000001111110000000000 0000000001111000000000011111100000000 0000000001111000000000001111111000000 0000000001111000000000000011111100000 0000000001111000000000000001111111000 0000000001111000000000000000011111110 1111111111111111111111111111111111111 1111111111111111111111111111111111111 1111111111111111111111111111111111111 1111111111111111111111111111111111111 1111111111111111111111111111111111111 0000000001111000000000000000000000000 0000000001111000000000000000000000000 0000000001111000000000000000000000000 0000000001111000000000000000000000000 0000000001111000000000000000000000000', 5 => '0000000000000000000000000000000000000 0111100000000000000000000000000000000 0111100000000000001111111111110000000 0111000000000000001111111111111111111 1111000000000000001111111111111111111 1111000000000000001111111111111111111 1111000000000000001111000000011111111 1111000000000000001111000000000001111 1111000000000000001111000000000001111 1111000000000000001111000000000001111 1111000000000000001111000000000001111 1111000000000000001111000000000001111 0111100000000000011111000000000001111 0111100000000000011110000000000001111 0111110000000000111110000000000001111 0111111000000001111110000000000001111 0011111100000011111100000000000001111 0001111111111111111100000000000001111 0000111111111111111000000000000001111 0000011111111111110000000000000001111 0000001111111111100000000000000000000 0000000000111000000000000000000000000', 6 => '0000000000000000000000000000000000000 0000000000111111111111100000000000000 0000000111111111111111111110000000000 0000011111111111111111111111100000000 0000111111111111111111111111111000000 0001111111111111111011111111111100000 0011111100000000111000000111111110000 0111110000000000011100000000111111000 0111100000000000001110000000011111100 0111100000000000001111000000001111100 1111000000000000000111000000000111110 1111000000000000000111100000000011110 1111000000000000000111100000000011110 1111000000000000000111100000000001111 1111000000000000000111100000000001111 1111000000000000000111100000000001111 0111100000000000001111100000000001111 0111110000000000011111000000000001111 0011111000000000111111000000000001111 0011111111111111111110000000000001110 0001111111111111111110000000000011110 0000111111111111111100000000000011110 0000001111111111110000000000000000000 0000000011111111000000000000000000000', 7 => '0000000000000000000000000000000000000 0000000000000000000000000000000001111 0000000000000000000000000000000001111 0000000000000000000000000000000001111 0000000000000000000000000000000001111 0000000000000000000000000000000001111 1110000000000000000000000000000001111 1111111000000000000000000000000001111 1111111111100000000000000000000001111 1111111111111100000000000000000001111 1111111111111111000000000000000001111 0000001111111111111000000000000001111 0000000001111111111110000000000001111 0000000000001111111111100000000001111 0000000000000001111111111000000001111 0000000000000000001111111110000001111 0000000000000000000011111111100001111 0000000000000000000000111111111001111 0000000000000000000000001111111111111 0000000000000000000000000011111111111 0000000000000000000000000000111111111 0000000000000000000000000000001111111 0000000000000000000000000000000011111 0000000000000000000000000000000000111', 8 => '0000000000000000000000000000000000000 0000000001110000000000000000000000000 0000001111111110000000000000000000000 0000111111111111100000000111111000000 0001111111111111110000011111111110000 0011111111111111111000111111111111000 0011111100000011111001111111111111100 0111110000000000111111111000001111110 0111100000000000011111110000000111110 0111100000000000011111100000000011110 1111000000000000001111000000000001111 1111000000000000001111000000000001111 1111000000000000001111000000000001111 1111000000000000001111000000000001111 1111000000000000001111000000000001111 1111000000000000001111000000000001111 0111100000000000011111100000000011110 0111100000000000011111110000000111110 0111110000000000111111111000001111110 0011111000000001111001111111111111100 0011111111111111111000111111111111000 0001111111111111110000011111111110000 0000111111111111100000000111111000000 0000011111111110000000000000000000000 0000000011111000000000000000000000000', 9 => '0000000000000000000000000000000000000 0000000000000000000000011110000000000 0000000000000000000011111111110000000 0011110000000000001111111111111100000 0111100000000000011111111111111110000 0111100000000000111111111111111111000 0111000000000001111111000000011111100 1111000000000001111100000000000111110 1111000000000001111000000000000011110 1111000000000011111000000000000011110 1111000000000011110000000000000001111 1111000000000011110000000000000001111 1111000000000011110000000000000001111 0111100000000011110000000000000001111 0111100000000011110000000000000001111 0111110000000001110000000000000001111 0011111000000001111000000000000011110 0011111100000000111000000000000111110 0001111111000000011100000000001111110 0000111111110000001111000001111111100 0000011111111111111111111111111111000 0000000111111111111111111111111110000 0000000001111111111111111111111000000 0000000000001111111111111111100000000 0000000000000000001111100000000000000' ); foreach ($data as $key => $val) { similar_text($numStr, $val, $pre); if ($pre > 70) { // 相似度95%以上 $result = $key; break; } } return $result; } } $imgPath = "imgc.png"; $gjPhone = new gjPhone($imgPath); // 进行颜色分离 $gjPhone->getHec(); // 画出横向数据 $horData = $gjPhone->magHorData(); echo "===============横向数据==============
"; $gjPhone->drawWH($horData); // 画出纵向数据 $verData = $gjPhone->magVerData($horData); // echo "
===============纵向数据==============< br/>
"; // $gjPhone->drawWH($verData); // 输出电话 $phone = $gjPhone->showPhone($verData); echo "
===============电话==============
" . $phone; ```
------本文结束
感谢阅读------
上一篇:
Beanstalk队列学习
下一篇:
html转图片下载与保存