Table of Contents

Class CloudVisionImageModerator

Namespace
UsluzionicaServer.Infrastructure.Media
Assembly
UsluzionicaServer.dll

Provera slika preko Google Cloud Vision SafeSearch-a.

ZAŠTO GOOGLE, a ne lokalni ONNX model: Prvih 1.000 slika mesečno je besplatno — za aplikaciju koja tek kreće to je oko 200 novih oglasa sa po pet slika. Lokalni model (NsfwSharp, NudeNet) ne bi koštao ništa po slici, ali bi na jeftinom Hetzner VPS-u trošio CPU koji deli sa bazom i API-jem, i nosio bi ~50 MB modela u Docker slici.

ZAŠTO REST, a ne Google.Cloud.Vision.V1 paket: Paket povlači gRPC i ceo Google.Api lanac zavisnosti zbog jednog poziva koji je običan POST sa base64 telom. Ovako nema nove zavisnosti.

KLJUČ NE SME U REPO. Čita se iz konfiguracije (ImageModeration:ApiKey), koja na produkciji dolazi iz .env-a.

public sealed class CloudVisionImageModerator : IImageModerator
Inheritance
CloudVisionImageModerator
Implements
Inherited Members

Constructors

CloudVisionImageModerator(HttpClient, IConfiguration, ILogger<CloudVisionImageModerator>)

Provera slika preko Google Cloud Vision SafeSearch-a.

ZAŠTO GOOGLE, a ne lokalni ONNX model: Prvih 1.000 slika mesečno je besplatno — za aplikaciju koja tek kreće to je oko 200 novih oglasa sa po pet slika. Lokalni model (NsfwSharp, NudeNet) ne bi koštao ništa po slici, ali bi na jeftinom Hetzner VPS-u trošio CPU koji deli sa bazom i API-jem, i nosio bi ~50 MB modela u Docker slici.

ZAŠTO REST, a ne Google.Cloud.Vision.V1 paket: Paket povlači gRPC i ceo Google.Api lanac zavisnosti zbog jednog poziva koji je običan POST sa base64 telom. Ovako nema nove zavisnosti.

KLJUČ NE SME U REPO. Čita se iz konfiguracije (ImageModeration:ApiKey), koja na produkciji dolazi iz .env-a.

Methods

ScanAsync(Stream, CancellationToken)