1) Я не знаю, что вы пытались сделать с const steps
, но это не имеет никакого смысла.Вам не нужна команда npm install
внутри вашего приложения React.Я также не вижу никакой цели включения связки JavaScript внутри строки.
2) Внутри вашего фактического App
класса внизу, где вы используете компонент ImageUploader
,Вы не следовали своему собственному совету из steps
выше и включили метод onChange
.Из того, что я вижу из документации ImageUploader
, это то, что вы будете использовать для выполнения определенного действия после того, как пользователь загрузит изображение.
3) Вы не предприняли никаких попыток фактически интегрироватьAPI IBM Watson в этот код.Очевидно, что это будет критически важным шагом в достижении вашей заявленной цели.Вы должны сделать искреннюю попытку самостоятельно, прежде чем публиковать здесь вопрос.
В любом случае, основная идея того, что вам нужно сделать, заключается в том, что после того, как пользователь загрузит изображение, вы отправляете запрос API в API распознавания изображений Watson:https://www.ibm.com/watson/developercloud/visual-recognition/api/v3/node.html?node#detect-faces
Вам нужно будет создать для них учетную запись и получить ключ разработчика (он должен быть бесплатным для очень небольшого числа запросов).Затем вы захотите установить их API, используя npm install --save watson-developer-cloud
(примечание: как я уже упоминал выше, он не принадлежит вашему коду, как вы сейчас; он предназначен для запуска из вашего терминала / оболочки в каталоге проекта.
В верхней части файла вы включите оператор require
для SDK:
const VisualRecognitionV3 = require('watson-developer-cloud/visual-recognition/v3');
и создадите экземпляр SDK с помощью своего ключа API:
const visualRecognition = new VisualRecognitionV3({
version: '2018-03-19',
iam_apikey: '{iam_api_key}'
});
Наконец, когда пользователь загружает изображение, вы вызываете соответствующую функцию, используя файл изображения в качестве параметра:
visualRecognition.detectFaces({image_file: file}, function(err, response) {
if (err)
console.log(err);
else
console.log(JSON.stringify(response, null, 2))
});
Соберите все вместе и ваше приложениеможет выглядеть примерно так:
import React from 'react';
import ImageUploader from 'react-images-upload';
const VisualRecognitionV3 = require('watson-developer-cloud/visual-recognition/v3');
const visualRecognition = new VisualRecognitionV3({
version: '2018-03-19',
iam_apikey: '{iam_api_key}'
});
class App extends React.Component {
constructor(props) {
super(props);
this.onDrop = this.onDrop.bind(this);
}
onDrop(pictureFiles, pictureDataURLs) {
visualRecognition.detectFaces({image_file: pictureFiles[0]}, function(err, response) {
if (err) {
console.log(err);
} else
console.log(JSON.stringify(response, null, 2));
}
});
}
render() {
return (
<ImageUploader
withIcon={true}
buttonText='Escolher Imagens'
onChange={this.onDrop}
imgExtension={['.jpg', '.gif', '.png', '.gif']}
maxFileSize={5242880}
/>
);
}
}
Я не тестировал этот код, поэтому у IBM Watson SDK может возникнуть проблема с форматом pictureFile [0] (а также я не уверен, что pictureFilesдаже массив, но вы должны легко проверить компонент React-Images-Uploader, чтобы увидеть, что это за структура данных.) Но, независимо от этого, это основная идея.
Кстати, вывод этого кодабудет в JavaScript Developer Console, и он распечатает размеры и координаты квадрата вокруг лица (лиц) на изображении, но этот код не будет рисовать его для вас.Это еще одна задача, и есть множество способов сделать это, и вы можете спросить об этом в другом месте.Но здесь вы получите координаты, форму и размер граней, а затем их просто нужно нарисовать.