PHP使用OCR技术实现识别图片中的文字

 更新时间:2024年11月27日 11:05:48   作者:Student_Li  
OCR是一种通过图像处理技术从图片或扫描件中提取文字的技术,它可以将非结构化的图片内容转化为可编辑的文本,下面我们就来看看PHP如何OCR识别图片中的文字

在日常开发中,我们常常会遇到需要从图片中提取文字的需求,例如处理扫描件中的文字、验证码识别或者实现文档数字化管理。OCR(Optical Character Recognition,光学字符识别)技术可以帮助我们快速完成这项任务。今天就来聊聊,如何在 PHP 中实现 OCR 技术,从图片中提取文字。

一、什么是OCR技术

OCR 是一种通过图像处理技术从图片或扫描件中提取文字的技术,它可以将非结构化的图片内容转化为可编辑的文本。这种技术广泛应用于以下场景:

  • 证件扫描识别(如身份证、驾照等)
  • 文档数字化存储
  • 图片验证码识别
  • 发票、票据处理

二、PHP如何实现OCR

尽管 PHP 本身并不提供原生的 OCR 支持,但可以通过以下几种方式轻松实现 OCR:

  • 使用开源 OCR 引擎,如 Tesseract-OCR
  • 调用第三方 OCR 服务(如百度智能云、阿里云、腾讯云等)。

下面我们通过 Tesseract-OCR 和百度 OCR API 两种方式,手把手教你实现图片文字识别功能。

三、方法一:使用 Tesseract-OCR

1. 什么是 Tesseract-OCR

Tesseract 是 Google 提供的一个开源 OCR 引擎,它支持多种语言的文字识别,包括中文,且可以通过简单的命令行或程序语言调用。

2. 环境准备

安装 Tesseract

根据你的系统类型安装 Tesseract:

Ubuntu/Linux

sudo apt update
sudo apt install tesseract-ocr
sudo apt install tesseract-ocr-chi-sim # 安装中文语言包

MacOS

brew install tesseract
brew install tesseract-lang

Windows 前往 Tesseract 官方下载页面 下载并安装。

3. PHP与Tesseract集成

安装 PHP 扩展

通过 Composer 安装适配 Tesseract 的 PHP 库,例如 thiagoalessio/tesseract_ocr

composer require thiagoalessio/tesseract_ocr

示例代码

以下是一个简单的图片文字识别示例:

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

use thiagoalessio\TesseractOCR\TesseractOCR;

// 选择图片
$imagePath = 'test-image.png';

// 初始化 Tesseract
$ocr = new TesseractOCR($imagePath);

// 设置语言(中文)
$ocr->lang('chi_sim'); // 简体中文
$result = $ocr->run();

echo "识别结果:\n";
echo $result;

运行后,如果 test-image.png 中包含文字,Tesseract 将会提取并输出文本内容。

四、方法二:调用百度OCR API

如果你希望更快速、更精准的识别效果,使用云服务是个不错的选择。这里以 百度智能云 OCR 为例。

1. 注册百度智能云

  • 访问 百度智能云 OCR 服务。
  • 注册账号并创建应用,获取 API KeySecret Key

2. 安装 HTTP 请求库

推荐使用 Guzzle 发送 HTTP 请求。安装方式如下:

composer require guzzlehttp/guzzle

3. 获取 Access Token

百度 API 的访问需要使用 Access Token。以下是获取 Token 的代码:

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

use GuzzleHttp\Client;

function getAccessToken($apiKey, $secretKey) {
    $client = new Client();
    $response = $client->post('https://aip.baidubce.com/oauth/2.0/token', [
        'form_params' => [
            'grant_type' => 'client_credentials',
            'client_id' => $apiKey,
            'client_secret' => $secretKey,
        ]
    ]);

    $data = json_decode($response->getBody(), true);
    return $data['access_token'] ?? null;
}

$apiKey = '你的API Key';
$secretKey = '你的Secret Key';

$token = getAccessToken($apiKey, $secretKey);
echo "Access Token: $token\n";

4. 调用百度 OCR 接口

使用获得的 Token 调用 OCR 接口,完成图片文字识别:

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

use GuzzleHttp\Client;

function recognizeText($imagePath, $accessToken) {
    $client = new Client();

    // 读取图片并进行 Base64 编码
    $imageData = base64_encode(file_get_contents($imagePath));

    $response = $client->post('https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic', [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
        ],
        'query' => [
            'access_token' => $accessToken,
        ],
        'form_params' => [
            'image' => $imageData,
        ],
    ]);

    $data = json_decode($response->getBody(), true);
    return $data['words_result'] ?? [];
}

$imagePath = 'test-image.png';
$accessToken = '你的Access Token';

$result = recognizeText($imagePath, $accessToken);

echo "识别结果:\n";
foreach ($result as $item) {
    echo $item['words'] . "\n";
}

五、比较两种方案

特点Tesseract-OCR百度智能云 OCR
适用场景本地离线识别在线云服务,支持大规模处理
语言支持多语言(需安装对应语言包)多语言自动识别
识别精度精度一般,取决于图片质量精度高,适合复杂场景
复杂度安装配置简单需联网,稍复杂
费用免费部分功能收费

六、总结

通过以上两种方案,PHP 开发者可以轻松实现 OCR 技术在项目中的应用:

  • 对于小型、本地化需求,Tesseract 是一个不错的选择。
  • 对于需要高精度、多功能的场景,云服务(如百度智能云 OCR)更为合适。

到此这篇关于PHP使用OCR技术实现识别图片中的文字的文章就介绍到这了,更多相关PHP OCR识别图片文字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • php实现的三个常用加密解密功能函数示例

    php实现的三个常用加密解密功能函数示例

    这篇文章主要介绍了php实现的三个常用加密解密功能函数,涉及php针对字符串的遍历、截取、编码转换等相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • php使用Jpgraph绘制柱形图的方法

    php使用Jpgraph绘制柱形图的方法

    这篇文章主要介绍了php使用Jpgraph绘制柱形图的方法,涉及Jpgraph通过定义数组、设置阴影、边距、字体等实现柱形图的相关技巧,需要的朋友可以参考下
    2015-06-06
  • PHP实现的防止跨站和xss攻击代码【来自阿里云】

    PHP实现的防止跨站和xss攻击代码【来自阿里云】

    这篇文章主要介绍了PHP实现的防止跨站和xss攻击代码,是一款来自阿里云的防注入脚本,可实现针对注入、XSS攻击等的过滤功能,需要的朋友可以参考下
    2018-01-01
  • php dirname(__FILE__) 获取当前文件的绝对路径

    php dirname(__FILE__) 获取当前文件的绝对路径

    dirname(__FILE__) 取到的是当前文件的绝对路径,也就是说,比起相对路径,查找速度是最快的。
    2011-06-06
  • php命名空间举例介绍使用方法

    php命名空间举例介绍使用方法

    从广义上来说,命名空间是一种封装事物的方法,在很多地方都可以见到这种抽象概念。PHP中命名空间(namespace)是在 PHP5.3 中加入的,如果你了解过 C++ 的话,那命名空间就不算什么新事物了。不过命名空间在 PHP 当中还是相当重要的
    2022-09-09
  • PHP安全上传图片的方法

    PHP安全上传图片的方法

    这篇文章主要介绍了PHP安全上传图片的方法,可检测图片类型实现安全判断图片的功能,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • php精确的统计在线人数的方法

    php精确的统计在线人数的方法

    这篇文章主要介绍了php精确的统计在线人数的方法,需要的朋友可以参考下
    2015-10-10
  • PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)

    PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)

    通过网站功能来增加一字段,获取来源关键字,如何获取来源关键字,代码发在下面,里面包含(百度、谷歌、雅虎、搜狗、搜搜、必应、有道)几大搜索引擎的获取方法,代码中均注明,希望对你有帮助,分享一下
    2012-10-10
  • PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析

    PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析

    这篇文章主要介绍了PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法,结合实例形式分析了php的图像载入函数imagecreatefromgif、imagecreatefromjpeg、imagecreatefrompng、imagecreatefromwbmp及imagecreatefromstring使用技巧,需要的朋友可以参考下
    2016-11-11
  • php链表用法实例分析

    php链表用法实例分析

    这篇文章主要介绍了php链表用法,实例分析了php创建链表及针对链表节点的增加、删除、更新与遍历等常用操作,需要的朋友可以参考下
    2015-07-07

最新评论