// Original Copyright Microsoft Corporation. Licensed under the MIT License. // Modifications Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: LicenseRef-.amazon.com.-AmznSL-1.0 // Licensed under the Amazon Software License http://aws.amazon.com/asl/ // 2022-08-19: Amazon addition. import {useRef, useState, useEffect} from 'react'; import {analyzeImage} from '../utils/predict'; import {createInferenceSession} from '../utils/modelHelper'; import {fetchLatestModelFromS3} from '../utils/modelApi'; import {uploadImageToS3} from '../utils/imageApi'; import {uploadLogs} from '../utils/logsApi'; import InputGroup from 'react-bootstrap/InputGroup'; import Form from 'react-bootstrap/Form'; import Button from 'react-bootstrap/Button'; import Stack from 'react-bootstrap/Stack'; import Table from 'react-bootstrap/Table'; import FloatingLabel from 'react-bootstrap/FloatingLabel'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; // End of Amazon addition. interface Props { height: number; width: number; } const ImageCanvas = (props: Props) => { const canvasRef = useRef(null); // 2022-08-19: Amazon addition. const [selectedImage, setSelectedImage] = useState(null); const [selectedImageUrl, setSelectedImageUrl] = useState(null); const [selectedModel, setSelectedModel] = useState(null); const [inferenceResponse, setInferenceResponse] = useState(null); useEffect(() => { if (selectedImage != null) { const objectUrl = URL.createObjectURL(selectedImage) console.log(`Image file uri: ${objectUrl}`) setSelectedImageUrl(objectUrl); let image: HTMLImageElement = new Image(); image.src = objectUrl // End of Amazon addition. const canvas = canvasRef.current; const ctx = canvas!.getContext('2d'); image.onload = () => { ctx!.drawImage(image, 0, 0, props.width, props.height); } // 2022-08-19: Amazon addition. } }, [selectedImage, props.width, props.height]) useEffect(() => { if (selectedModel != null) { const objectUrl = URL.createObjectURL(selectedModel) console.log(`Model file uri: ${objectUrl}`) createInferenceSession(objectUrl) } }, [selectedModel]) const updateImage = (event: any) => { if (event.target.files) { if (event.target.files[0]) { const i = event.target.files[0]; console.log('Image file selected'); console.log(i); setSelectedImage(i); } else { console.log('No image file selected') setSelectedImage(null) setSelectedImageUrl(null) } setInferenceResponse(null) } }; const updateModel = (event: any) => { if (event.target.files) { if (event.target.files[0]) { const i = event.target.files[0]; console.log('Model file selected') console.log(i) setSelectedModel(i); } else { console.log('No model file selected') setSelectedModel(null) } setInferenceResponse(null) } }; const missingRequiredInput = () => { return !selectedImageUrl || !selectedModel } const submit = async () => { const inferenceResponse = await analyzeImage(selectedImageUrl); const formattedResponse = inferenceResponse .filter((item: any) => (item.response[0]).length > 0) .map(function (item: any) { const [inferenceResult, inferenceTime] = item.response; // Get the highest confidence result const topResult = inferenceResult[0]; return { type: item.type, label: topResult.name.toUpperCase(), score: topResult.probability, time: inferenceTime } }); console.log(formattedResponse) setInferenceResponse(formattedResponse) const uploadResponse = await uploadImageToS3(selectedImageUrl); uploadLogs(formattedResponse, uploadResponse, selectedModel); }; return (
Select model Select image
{inferenceResponse && (
Label Score
{inferenceResponse.map((item: any) => ( ))}
Runtime Type Inference Time
{item.type} {item.time}
)}
); // End of Amazon addition. }; export default ImageCanvas;