aiEvaluateImageToScore

galleryApi
Kar 2024-11-27 21:03:08 +05:30
parent 9fa326666f
commit ddc864a25d
1 changed files with 96 additions and 8 deletions

View File

@ -1,15 +1,103 @@
const AWS = require('aws-sdk');
const FormData = require('form-data');
const axios = require('axios');
const mongoose = require('mongoose');
const Game = require('./Game'); // Ensure this path matches your project structure
const aiEvaluateImageToScore = async (req, res) => {
AWS.config.update({
region: 'ap-south-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
});
try {
// Destructure data from req.body
const { userId, gameName, gameID, gameTime, gameStar, screenShot } = req.body;
if (!screenShot) {
return res.status(400).json({ error: 'Screenshot is required' });
}
// Decode the base64 image
const buffer = Buffer.from(screenShot, 'base64');
const fileName = `${Date.now()}-${gameID}.png`; // Unique filename
const bucketName = process.env.S3_BUCKET_NAME;
// Initialize S3
AWS.config.update({
region: 'ap-south-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
});
const s3 = new AWS.S3();
// Upload the image to S3
const s3Params = {
Bucket: bucketName,
Key: `screenshots/${fileName}`,
Body: buffer,
ContentType: 'image/png',
ACL: 'public-read', // Make the file publicly accessible
};
const s3UploadResponse = await s3.upload(s3Params).promise();
const screenshotUrl = s3UploadResponse.Location;
// Prepare the OpenAI API request
const openAiPayload = {
model: 'gpt-4o-mini',
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: 'The coloring was done by a 5-year-old kid. Give a score between 1 to 10 in JSON format.',
},
{
type: 'image_url',
image_url: {
url: screenshotUrl,
},
},
],
},
],
max_tokens: 300,
};
// Call the OpenAI API
const openAiResponse = await axios.post(
'https://api.openai.com/v1/chat/completions',
openAiPayload,
{
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
},
}
);
// Extract the score from OpenAI's response
const scoreResponse = openAiResponse.data.choices[0].message.content;
const parsedScore = JSON.parse(scoreResponse);
// Save to MongoDB
const gameData = new Game({
gameName,
userId,
gameID,
gameTime,
score: parsedScore.score || 'N/A', // Adjust key to match OpenAI response
gameStar,
screenshotUrl,
});
await gameData.save();
// Respond with the saved data
return res.status(201).json({
message: 'Game data saved successfully',
data: gameData,
});
} catch (error) {
console.error('Error:', error.message);
return res.status(500).json({ error: 'Something went wrong' });
}
};
module.exports = aiEvaluateImageToScore;