clarifai/clarifai-php

Clarifai PHP 客户端

0.7.0 2020-02-16 19:54 UTC

README

Clarifai logo

已弃用

此 API 客户端不再受支持。

请使用 Clarifai PHP gRPC 代替,它更快且功能更丰富。

Clarifai API PHP 客户端

Latest Stable Version License

安装

composer require clarifai/clarifai-php

注意:如果您没有使用框架(例如 Laravel),您可能需要引入由 composer 生成的 autoload.php 文件: require_once('vendor/autoload.php');

先决条件

PHP >=7.0

注意:此库需要启用 curl PHP 扩展。这很可能已经在您的 PHP 主机服务上完成,除非您自己托管 PHP,在这种情况下,您可能需要取消注释(删除 ;php.ini 文件中的 extension=php_curl.dll 行。

入门

我们将展示使用 Clarifai API 的三个常见示例。以下是需要运行这些示例的所有导入。此外,创建了 ClarifaiClient 对象,该对象用于访问 Clarifai API 中的所有可用方法。

use Clarifai\API\ClarifaiClient;
use Clarifai\DTOs\Inputs\ClarifaiURLImage;
use Clarifai\DTOs\Outputs\ClarifaiOutput;
use Clarifai\DTOs\Predictions\Concept;
use Clarifai\DTOs\Searches\SearchBy;
use Clarifai\DTOs\Searches\SearchInputsResult;
use Clarifai\DTOs\Models\ModelType;

// Skip the argument to fetch the key from the CLARIFAI_API_KEY env. variable
$client = new ClarifaiClient('YOUR_API_KEY');

注意:与其将您的 Clarifai API 密钥硬编码,不如将密钥保存在环境变量中。如果您跳过参数并简单地执行 new ClarifaiClient(),客户端将自动尝试从名为 CLARIFAI_API_KEY 的环境变量中读取您的 API 密钥,您应在环境中设置该密钥。

示例 #1:预测

以下代码将识别列表中每张图片中包含的概念。它使用我们通用公共模型,该模型识别各种概念。

$model = $client->publicModels()->generalModel();
$response = $model->batchPredict([
    new ClarifaiURLImage('https://samples.clarifai.com/metro-north.jpg'),
    new ClarifaiURLImage('https://samples.clarifai.com/wedding.jpg'),
])->executeSync();

如果您的用例需要更具体的预测,您可以使用更多专用公共模型之一,如 weddingModelfoodModelnfswModel 等。 这里 是所有可用模型的列表。

注意:您还可以创建自己的模型,并使用自己的图像数据集对其进行训练。我们在示例 #2 中展示了如何进行。除了使用 new ClarifaiURLImage 在 URL 图像上运行预测之外,您还可以使用 new ClarifaiFileImage 在本地文件图像上预测。

下面是如何从 $response 变量中访问数据。对于每张图片,我们打印出模型为该图片预测的所有概念。

/** @var ClarifaiOutput[] $outputs */
$outputs = $response->get();

foreach ($outputs as $output) {
    /** @var ClarifaiURLImage $image */
    $image = $output->input();
    echo "Predicted concepts for image at url " . $image->url() . "\n";
    
    /** @var Concept $concept */
    foreach ($output->data() as $concept) {
        echo $concept->name() . ': ' . $concept->value() . "\n";
    }
    echo "\n";
}

注意:存储在 $concept->value() 中的值是概念 $concept->name() 在图片中包含的百分比可能性。

当出现问题时,您可以通过处理错误并检查详细信息来处理。在您的程序中,以下代码将位于上一部分的代码之上。

if (!$response->isSuccessful()) {
    echo "Response is not successful. Reason: \n";
    echo $response->status()->description() . "\n";
    echo $response->status()->errorDetails() . "\n";
    echo "Status code: " . $response->status()->statusCode();
    exit(1);
}

有关在视频中预测概念的说明,请参阅 Clarifai 开发者指南

示例 #2:创建和训练自定义模型 在一些输入和概念上创建和训练自定义模型

您可以选择创建自己的模型,添加训练数据,并使用该模型以与示例#1相同的方式对新图像进行预测。

这首先需要创建模型的主题概念。然后添加样本输入,我们将它们与某些概念关联或解关联。模型创建后,我们对其进行训练,之后该模型可用于对新输入进行预测。

$client->addConcepts([new Concept('boscoe')])
    ->executeSync();

$client->addInputs([
    (new ClarifaiURLImage('https://samples.clarifai.com/puppy.jpeg'))
        ->withPositiveConcepts([new Concept('boscoe')]),
    (new ClarifaiURLImage('https://samples.clarifai.com/wedding.jpg'))
        ->withNegativeConcepts([new Concept('boscoe')])
])
    ->executeSync();

$client->createModel('pets')
    ->withConcepts([new Concept('boscoe')])
    ->executeSync();

$response = $client->trainModel(ModelType::concept(), 'pets')
    ->executeSync();

if ($response->isSuccessful()) {
    echo "Response is successful.\n";
} else {
    echo "Response is not successful. Reason: \n";
    echo $response->status()->description() . "\n";
    echo $response->status()->errorDetails() . "\n";
    echo "Status code: " . $response->status()->statusCode();
}

示例#3:视觉搜索

可以使用图像在搜索中找到其他视觉相似的图像。在添加一些图像使用 addInputs(参见示例#2)后,我们使用 searchInputs 进行搜索。

$response = $client->searchInputs(
        SearchBy::urlImageVisually('https://samples.clarifai.com/metro-north.jpg'))
    ->executeSync();

if ($response->isSuccessful()) {
    echo "Response is successful.\n";

    /** @var SearchInputsResult $result */
    $result = $response->get();

    foreach ($result->searchHits() as $searchHit) {
        echo $searchHit->input()->id() . ' ' . $searchHit->score() . "\n";
    }
} else {
    echo "Response is not successful. Reason: \n";
    echo $response->status()->description() . "\n";
    echo $response->status()->errorDetails() . "\n";
    echo "Status code: " . $response->status()->statusCode();
}

请参阅Clarifai开发者指南以获取更多关于Clarifai API可以提供的信息。

获取帮助

如果您在使用库方面需要任何帮助,请联系support@clarifai.com的支持团队或我们的开发者关系团队developers@clarifai.com

如果您发现了一个错误或想提出一个功能请求,请在此处创建问题或提交拉取请求。

许可证

本项目采用Apache 2.0许可证 - 请参阅LICENSE文件以获取详细信息。