Google Cloud Vision ImageAnnotator Файл учетных данных приложения Google не существует Codeigniter PHP - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь реализовать облачное видение Google с помощью API ImageAnnotator, используя codeigniter PHP.

Я установил требуемое облачное зрение Google, используя композитор, в свой сторонний каталог в codeigniter.

Это код выглядит в моем контроллере:

defined('BASEPATH') OR exit('No direct script access allowed');

use Google\Auth\ApplicationDefaultCredentials;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use Google\Cloud\Vision\V1\ImageAnnotatorClient;        

class Manage_center extends CI_Controller {

    function __construct() {
        parent::__construct();

        include APPPATH . 'third_party/vendor/autoload.php';
    }

    public function index()
    {
        $this->load->view('index');
    }


    function upload_ocr_image()
    {               
        //img_data contain image => i just shorten the code.
        $img_data = $this->upload->data();                                          

        // Authenticating with a keyfile path.
        putenv('GOOGLE_APPLICATION_CREDENTIALS='.base_url().'assets/google_cloud_vision/credentials.json');
        $scopes = ['https://www.googleapis.com/auth/cloud-vision'];

        // create middleware
        $middleware = ApplicationDefaultCredentials::getMiddleware($scopes);
        $stack = HandlerStack::create();
        $stack->push($middleware);

        $imageAnnotator = new ImageAnnotatorClient();

        # annotate the image                
        $response = $imageAnnotator->textDetection($img_data['full_path']);             
        $texts = $response->getTextAnnotations();

        printf('%d texts found:' . PHP_EOL, count($texts));
        foreach ($texts as $text) {
            print($text->getDescription() . PHP_EOL);

            # get bounds
            $vertices = $text->getBoundingPoly()->getVertices();
            $bounds = [];
            foreach ($vertices as $vertex) {
                $bounds[] = sprintf('(%d,%d)', $vertex->getX(), $vertex->getY());
            }
            print('Bounds: ' . join(', ',$bounds) . PHP_EOL);
        }

        $imageAnnotator->close();



    }
}

Я получил ошибку:

Тип: DomainException

Сообщение: невозможно прочитать учетные данные файл, указанный в GOOGLE_APPLICATION_CREDENTIALS: file http://localhost/theseeds/assets/google_cloud_vision/credentials.json не существует

Имя файла: D: \ XAMPP \ HTDOCS \ theseeds \ приложения \ THIRD_PARTY \ поставщика \ Google \ Auth \ SRC \ CredentialsLoader.php

Номер строки: 74

Файл: D: \ xampp \ htdocs \ theseeds \ application \ controllers \ Manage_center.php Строка: 3188
Функция: getMiddleware

Я не понимаю, почему возникает эта ошибка:

http://localhost/theseeds/assets/google_cloud_vision/credentials.json не существует

Потому что, когда я открыл ссылку, файл был там.

И эта ошибка:

Файл: D: \ xampp \ htdocs \ theseeds \ application \ controllers \ Admin_center.php Строка: 3188
Функция: getMiddleware

- это код строки:

$ middleware = ApplicationDefaultCredentials :: getMiddleware ($ scopes);

Как правильно использовать облачное зрение Google ImageAnnotatorClient в PHP Codeigniter?

Есть ли проблема с аутентификацией в Google Cloud API?

Спасибо

1 Ответ

0 голосов
/ 02 апреля 2019

Я нашел решение сам.

Вот как правильно использовать облачный Google ImageAnnotator с ключом учетной записи службы.

defined('BASEPATH') OR exit('No direct script access allowed');

use Google\Cloud\Vision\VisionClient;

class Admin_center extends CI_Controller {
    function __construct() {
        parent::__construct();

        include APPPATH . 'third_party/vendor/autoload.php';
    }

    public function index() {
        $this->load->view('index');
    }

    function upload_ocr_image() {               
        $img_data = $this->upload->data();                                          

        $vision = new VisionClient(['keyFile' => json_decode(file_get_contents('credentials.json'), true)]);

        $imageRes = fopen($img_data['full_path'], 'r');
        $image = $vision->image($imageRes,['Text_Detection']);
        $result = $vision->annotate($image);

        print_r($result);
    }
}
...