|
|
import {Controller, Post} from 'simple-ts-express-decorators'; |
|
|
import multer, {memoryStorage} from 'multer'; |
|
|
import {Request, Response} from 'express'; |
|
|
import {NsfwImageClassifier} from 'app/NsfwImageClassifier'; |
|
|
|
|
|
const upload = multer({storage: memoryStorage()}); |
|
|
|
|
|
@Controller() |
|
|
export class NsfwController { |
|
|
classifier: NsfwImageClassifier; |
|
|
|
|
|
constructor() { |
|
|
this.classifier = new NsfwImageClassifier(); |
|
|
} |
|
|
|
|
|
@Post('/classify', upload.single('image')) |
|
|
async classify(request: Request, response: Response) { |
|
|
if (!request.file) { |
|
|
return response |
|
|
.status(410) |
|
|
.json({error: 'Specify image'}); |
|
|
} |
|
|
|
|
|
const data = await this.classifier.classify(request.file.buffer); |
|
|
|
|
|
return response.json(data); |
|
|
} |
|
|
|
|
|
@Post('/classify-many', upload.array('images', 10)) |
|
|
async classifyMany(request: Request, response: Response) { |
|
|
if (!request.files || !request.files.length) { |
|
|
return response |
|
|
.status(410) |
|
|
.json({error: 'Specify images'}); |
|
|
} |
|
|
|
|
|
const buffers = (request.files as Express.Multer.File[]).map(file => file.buffer); |
|
|
const data = await this.classifier.classifyMany(buffers); |
|
|
|
|
|
return response.json(data); |
|
|
} |
|
|
} |
|
|
|