网上有写例子 写的,但我下载了都没法用 现在整理下。 如下代码是 外买库的 电话识别
上代码:
<?php
/**
* 电话号码识别.
* @author by zsc for 2010.03.24
*/
class gjPhone {
protected $imgPath; //图片路径
protected $imgSize; //图片大小
protected $hecData; //分离后数组
protected $horData; //横向整理的数据
protected $verData; //纵向整理的数据
function __construct($path) {
$this->imgPath = $path;
}
/**
* 颜色分离转换...
*
* @param unknown_type $path
* @return unknown
*/
public function getHec() {
;
$size = getimagesize($this->imgPath);
$res = imagecreatefromjpeg($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'] < 130 || $rgbarray['green'] < 180 || $rgbarray['blue'] < 40) {
$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) {
$count = count($newdata) + 1;
$iii = count($newdata[1]) + 1;
for ($i = 0; $i < $iii; ++ $i) {
for ($j = 1; $j < $count; ++ $j) {
$ndata[$i][$j] = @ $newdata[$j][$i];
}
}
$sum = count($ndata);
$c = 0;
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, $ndatas[$b])) {
$ndatas[$c] = $value;
$c++;
}
}
}
return $this->verData = $ndatas;
}
/**
* 显示电话号码...
*
* @return unknown
*/
public function showPhone($ndatas, $type = 1) {
$phone = null;
$d = 0;
foreach ($ndatas as $key => $val) {
if (in_array(1, $val)) {
//处理 粘脸
$b = array_count_values($val);
if ($b[1] == 1) {
$d++;
continue;
}
foreach ($val as $k => $v) {
@ $ndArr[$d] .= $v;
}
} else {
$d++;
}
}
// print_r($ndArr);
foreach ($ndArr as $key01 => $val01) {
if ($type == 1) {
$phone .= $this->initData($val01);
} else {
$phone .= $this->initData2($val01);
}
}
return $phone;
}
/**
* 分离显示...
*
* @param unknown_type $dataArr
*/
function drawWH($dataArr) {
if (is_array($dataArr)) {
foreach ($dataArr as $key => $val) {
foreach ($val as $k => $v) {
if ($v == 0) {
$c .= "<font color='#FFFFFF'>" . $v . "</font>";
} else {
$c .= $v;
}
}
$c .= "<br/>";
}
}
echo $c;
}
/**
* 初始数据...
*
* @param unknown_type $numStr
* @return unknown
*/
public function initData($numStr) {
$result = null;
$data = array (
0 => '0001111000011111111011110111111100111011111111001111111111110111111110',
1 => '011000000011000000111111111111111111111100000000110000000011',
2 => '110000001111000001111100001111110001111111111100110111100011',
3 => '0000000011110000001111001100111100110011110111001111111111111111011110',
4 => '0000011000000011110000111111000111001100111111111111111111110000001100',
5 => '111110001111111000111101100011110110001111011111111000111110',
6 => '0001111000011111111011111101111101100011110110001111011111111100111110',
7 => '110000000011000000111100011111110111111011111100001110000000',
8 => '0010001100111111111111111111111100110011110011001111111111111111011111',
9 => ' 0011000000111111001111111100111100011011110011001111111111110111111110',
'/' => '000000000111000000111110000011111000001111100000111110000000110000000000'
);
foreach ($data as $key => $val) {
similar_text($numStr, $val, $pre);
if ($pre > 98) { //相似度95%以上
$result = $key;
break;
}
}
return $result;
}
public function initData2($numStr) {
$result = null;
$data = array (
0 => '000111100000011111111000111101111100110011101100111111001100111111111100011111111000',
1 => '011000000000110000001100111111111100111111111100000000001100000000001100',
2 => '110000001100110000011100110000111100110001111100111111001100011110001100',
3 => '000000001100110000001100110011001100110011001100110111001100111111111100111101111000',
4 => '000001100000000011110000001111110000011100110000111111111100111111111100000000110000',
5 => '111110001100111110001100110110001100110110001100110111111100100011111000',
6 => '000111100000011111111000111111011100110110001100110110001100110111111100110011111000',
7 => '110000000000110000001100110001111100110111111000111111000000111000000000',
8 => '001000110000111111111100111111111100110011001100110011001100111111111100111101111100',
9 => '001100000000111111001100111111001100110001101100110011001100111111111100011111111000',
'/' => '000000000111000000111110000011111000001111100000111110000000110000000000'
);
foreach ($data as $key => $val) {
similar_text($numStr, $val, $pre);
if ($pre > 98) { //相似度95%以上
$result = $key;
break;
}
}
return $result;
}
}
?>
//==============================================
其实关键是的 创建自体模型。多做些 就准确了