Topik ini menjelaskan cara menggunakan Content Moderation SDK for Java untuk memoderasi gambar terhadap konten berisiko.
Deskripsi
Content Moderation SDK for PHP mendukung moderasi gambar secara sinkron dan asinkron.
Jika Anda menggunakan moderasi gambar sinkron, hasil moderasi akan dikembalikan secara real-time. Untuk informasi lebih lanjut tentang parameter terkait, lihat /green/image/scan.
Jika Anda menggunakan moderasi gambar asinkron, Anda harus memantau hasil moderasi atau mengonfigurasi notifikasi callback untuk menerima hasil moderasi. Untuk informasi lebih lanjut tentang parameter terkait, lihat /green/image/asyncscan and /green/image/results.
Prasyarat
Dependensi Java telah diinstal. Untuk informasi lebih lanjut, lihat Instalasi.
CatatanGunakan versi Java yang dijelaskan dalam topik Instalasi untuk menginstal dependensi. Jika tidak, pemanggilan operasi selanjutnya akan gagal.
Kelas utilitas Extension.Uploader telah diunduh dan diimpor ke proyek Anda jika Anda menyerahkan gambar lokal atau aliran gambar biner untuk moderasi gambar.
(Direkomendasikan) Kirim tugas moderasi gambar sinkron
Operasi | Deskripsi | Wilayah yang Didukung |
ImageSyncScanRequest | Mengirim permintaan sinkron untuk memoderasi gambar terhadap konten berisiko dalam beberapa skenario moderasi, termasuk pornografi, konten teroris, iklan, kode QR, adegan yang tidak diinginkan, dan deteksi logo. |
|
Contoh Kode
Kirim URL gambar online untuk moderasi gambar
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.green.model.v20180509.ImageSyncScanRequest; import com.aliyuncs.http.FormatType; import com.aliyuncs.http.HttpResponse; import com.aliyuncs.http.MethodType; import com.aliyuncs.http.ProtocolType; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import java.util.*; public class Main { public static void main(String[] args) throws Exception { /** * Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Untuk menghindari risiko keamanan, kami sarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. * Cara umum untuk mendapatkan variabel lingkungan: * Metode 1: * Dapatkan ID AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Metode 2: * Dapatkan ID AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ DefaultProfile profile = DefaultProfile.getProfile( "cn-shanghai", "Kami sarankan Anda mendapatkan ID AccessKey dari pengguna RAM Anda dari variabel lingkungan", "Kami sarankan Anda mendapatkan Rahasia AccessKey dari pengguna RAM Anda dari variabel lingkungan"); DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com"); // Catatan: Kami sarankan Anda menggunakan kembali instansiasi klien sebanyak mungkin. Ini meningkatkan performa moderasi dan menghindari koneksi klien berulang. IAcsClient client = new DefaultAcsClient(profile); ImageSyncScanRequest imageSyncScanRequest = new ImageSyncScanRequest(); // Tentukan format respons dari operasi. imageSyncScanRequest.setAcceptFormat(FormatType.JSON); // Tentukan metode permintaan. imageSyncScanRequest.setMethod(MethodType.POST); imageSyncScanRequest.setEncoding("utf-8"); // Baik HTTP maupun HTTPS didukung. imageSyncScanRequest.setProtocol(ProtocolType.HTTP); JSONObject httpBody = new JSONObject(); /** * Tentukan skenario moderasi. Sistem akan menagih Anda berdasarkan skenario moderasi yang Anda tentukan. * Anda dapat mengirim permintaan untuk memoderasi beberapa gambar sekaligus dan menentukan beberapa skenario moderasi untuk setiap gambar. Biaya semua skenario dihitung secara terpisah dan dijumlahkan. * Sebagai contoh, jika Anda memoderasi dua gambar untuk pornografi dan konten teroris, Anda akan dikenakan biaya untuk memoderasi dua gambar untuk pornografi dan dua gambar untuk konten teroris. * Pada parameter scenes, nilai porn menunjukkan bahwa server mendeteksi pornografi. */ httpBody.put("scenes", Arrays.asList("porn")); /** * Buat tugas untuk setiap gambar yang akan dimoderasi. * Jika Anda memoderasi beberapa gambar dalam satu permintaan, total waktu respons yang dihabiskan server untuk memproses permintaan dimulai saat permintaan dilakukan dan berakhir saat moderasi gambar terakhir selesai. * Secara umum, waktu respons rata-rata untuk memoderasi beberapa gambar dalam satu permintaan lebih lama daripada memoderasi satu gambar. Semakin banyak gambar yang Anda kirim sekaligus, semakin tinggi kemungkinan waktu respons rata-rata bertambah. * Dalam contoh ini, hanya satu gambar yang akan dimoderasi. Jika Anda ingin memoderasi beberapa gambar sekaligus, buat tugas untuk setiap gambar yang akan dimoderasi. */ JSONObject task = new JSONObject(); task.put("dataId", UUID.randomUUID().toString()); // Tentukan URL gambar. URL tersebut mengandung karakter khusus dan harus dienkripsi. task.put("url", "http://www.aliyundoc.com/xxx.test.jpg"); task.put("time", new Date()); httpBody.put("tasks", Arrays.asList(task)); imageSyncScanRequest.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()), "UTF-8", FormatType.JSON); /** * Tentukan periode timeout koneksi dan timeout baca. Periode timeout untuk server menyelesaikan permintaan moderasi gambar adalah 10 detik. * Jika Anda mengatur timeout baca menjadi periode kurang dari 10 detik, server mungkin menghasilkan kesalahan timeout baca selama pemrosesan permintaan. */ imageSyncScanRequest.setConnectTimeout(3000); imageSyncScanRequest.setReadTimeout(10000); HttpResponse httpResponse = null; try { httpResponse = client.doAction(imageSyncScanRequest); } catch (Exception e) { e.printStackTrace(); } // Hasil yang dikembalikan setelah server menerima dan memproses permintaan Anda. if (httpResponse != null && httpResponse.isSuccess()) { JSONObject scrResponse = JSON.parseObject(org.apache.commons.codec.binary.StringUtils.newStringUtf8(httpResponse.getHttpContent())); System.out.println(JSON.toJSONString(scrResponse, true)); int requestCode = scrResponse.getIntValue("code"); // Hasil moderasi semua gambar. JSONArray taskResults = scrResponse.getJSONArray("data"); if (200 == requestCode) { for (Object taskResult : taskResults) { // Hasil moderasi gambar tunggal. int taskCode = ((JSONObject) taskResult).getIntValue("code"); // Hasil moderasi gambar dalam skenario moderasi. Jika Anda menentukan beberapa skenario moderasi dalam permintaan, hasil moderasi gambar dalam setiap skenario akan dikembalikan. JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results"); if (200 == taskCode) { for (Object sceneResult : sceneResults) { String scene = ((JSONObject) sceneResult).getString("scene"); String suggestion = ((JSONObject) sceneResult).getString("suggestion"); // Ambil tindakan lebih lanjut berdasarkan nilai parameter scene dan suggestion. // Lakukan operasi berbeda pada gambar berdasarkan nilai parameter suggestion yang berbeda. Sebagai contoh, hapus gambar yang berisi konten yang tidak diinginkan. System.out.println("scene = [" + scene + "]"); System.out.println("suggestion = [" + suggestion + "]"); } } else { // Gambar tunggal gagal dimoderasi. Analisis kegagalan berdasarkan situasi aktual. System.out.println("Proses tugas gagal. Respons tugas:" + JSON.toJSONString(taskResult)); } } } else { /** * Permintaan gagal diproses. Analisis kegagalan berdasarkan situasi aktual. */ System.out.println("Seluruh permintaan pemindaian gambar gagal. Respons:" + JSON.toJSONString(scrResponse)); } } } }Kirim URL gambar lokal untuk moderasi gambar
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.green.extension.uploader.ClientUploader; import com.aliyuncs.green.model.v20180509.ImageSyncScanRequest; import com.aliyuncs.http.FormatType; import com.aliyuncs.http.HttpResponse; import com.aliyuncs.http.MethodType; import com.aliyuncs.http.ProtocolType; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import java.util.*; public class Main { public static void main(String[] args) throws Exception { /** * Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Untuk menghindari risiko keamanan, kami sarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. * Cara umum untuk mendapatkan variabel lingkungan: * Metode 1: * Dapatkan ID AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Metode 2: * Dapatkan ID AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ DefaultProfile profile = DefaultProfile.getProfile( "cn-shanghai", "Kami sarankan Anda mendapatkan ID AccessKey dari pengguna RAM Anda dari variabel lingkungan", "Kami sarankan Anda mendapatkan Rahasia AccessKey dari pengguna RAM Anda dari variabel lingkungan"); DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com"); // Catatan: Kami sarankan Anda menggunakan kembali instansiasi klien sebanyak mungkin. Ini meningkatkan performa moderasi dan menghindari koneksi klien berulang. IAcsClient client = new DefaultAcsClient(profile); ImageSyncScanRequest imageSyncScanRequest = new ImageSyncScanRequest(); // Tentukan format respons dari operasi. imageSyncScanRequest.setAcceptFormat(FormatType.JSON); // Tentukan metode permintaan. imageSyncScanRequest.setMethod(MethodType.POST); imageSyncScanRequest.setEncoding("utf-8"); // Baik HTTP maupun HTTPS didukung. imageSyncScanRequest.setProtocol(ProtocolType.HTTP); JSONObject httpBody = new JSONObject(); /** * Tentukan skenario moderasi. Sistem akan menagih Anda berdasarkan skenario moderasi yang Anda tentukan. * Anda dapat mengirim permintaan untuk memoderasi beberapa gambar sekaligus dan menentukan beberapa skenario moderasi untuk setiap gambar. Biaya semua skenario dihitung secara terpisah dan dijumlahkan. * Sebagai contoh, jika Anda memoderasi dua gambar untuk pornografi dan konten teroris, Anda akan dikenakan biaya untuk memoderasi dua gambar untuk pornografi dan dua gambar untuk konten teroris. * Pada parameter scenes, nilai porn menunjukkan bahwa server mendeteksi pornografi. */ httpBody.put("scenes", Arrays.asList("porn")); /** * Jika Anda ingin memoderasi gambar lokal, gunakan potongan kode berikut untuk menghasilkan URL berdasarkan jalur penyimpanan gambar. * Kemudian, kirimkan URL gambar yang dihasilkan ke server. */ String url = null; ClientUploader clientUploader = ClientUploader.getImageClientUploader(profile, false); try{ url = clientUploader.uploadFile("d:/test.jpg"); }catch (Exception e){ e.printStackTrace(); } /** * Buat tugas untuk setiap gambar yang akan dimoderasi. * Jika Anda memoderasi beberapa gambar dalam satu permintaan, total waktu respons yang dihabiskan server untuk memproses permintaan dimulai saat permintaan dilakukan dan berakhir saat moderasi gambar terakhir selesai. * Secara umum, waktu respons rata-rata untuk memoderasi beberapa gambar dalam satu permintaan lebih lama daripada memoderasi satu gambar. Semakin banyak gambar yang Anda kirim sekaligus, semakin tinggi kemungkinan waktu respons rata-rata bertambah. * Dalam contoh ini, hanya satu gambar yang akan dimoderasi. Jika Anda ingin memoderasi beberapa gambar sekaligus, buat tugas untuk setiap gambar yang akan dimoderasi. */ JSONObject task = new JSONObject(); task.put("dataId", UUID.randomUUID().toString()); // Setel parameter url ke URL gambar yang dikirimkan ke server. URL tersebut mengandung karakter khusus dan harus dienkripsi. task.put("url", url); task.put("time", new Date()); httpBody.put("tasks", Arrays.asList(task)); imageSyncScanRequest.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()), "UTF-8", FormatType.JSON); /** * Tentukan periode timeout koneksi dan timeout baca. Periode timeout untuk server menyelesaikan permintaan moderasi gambar adalah 10 detik. * Jika Anda mengatur timeout baca menjadi periode kurang dari 10 detik, server mungkin menghasilkan kesalahan timeout baca selama pemrosesan permintaan. */ imageSyncScanRequest.setConnectTimeout(3000); imageSyncScanRequest.setReadTimeout(10000); HttpResponse httpResponse = null; try { httpResponse = client.doAction(imageSyncScanRequest); } catch (Exception e) { e.printStackTrace(); } // Hasil yang dikembalikan setelah server menerima dan memproses permintaan Anda. if (httpResponse != null && httpResponse.isSuccess()) { JSONObject scrResponse = JSON.parseObject(org.apache.commons.codec.binary.StringUtils.newStringUtf8(httpResponse.getHttpContent())); System.out.println(JSON.toJSONString(scrResponse, true)); int requestCode = scrResponse.getIntValue("code"); // Hasil moderasi semua gambar. JSONArray taskResults = scrResponse.getJSONArray("data"); if (200 == requestCode) { for (Object taskResult : taskResults) { // Hasil moderasi gambar tunggal. int taskCode = ((JSONObject) taskResult).getIntValue("code"); // Hasil moderasi gambar dalam skenario moderasi. Jika Anda menentukan beberapa skenario moderasi dalam permintaan, hasil moderasi gambar dalam setiap skenario akan dikembalikan. JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results"); if (200 == taskCode) { for (Object sceneResult : sceneResults) { String scene = ((JSONObject) sceneResult).getString("scene"); String suggestion = ((JSONObject) sceneResult).getString("suggestion"); // Ambil tindakan lebih lanjut berdasarkan nilai parameter scene dan suggestion. // Lakukan operasi berbeda pada gambar berdasarkan nilai parameter suggestion yang berbeda. Sebagai contoh, hapus gambar yang berisi konten yang tidak diinginkan. System.out.println("scene = [" + scene + "]"); System.out.println("suggestion = [" + suggestion + "]"); } } else { // Gambar tunggal gagal dimoderasi. Analisis kegagalan berdasarkan situasi aktual. System.out.println("Proses tugas gagal. Respons tugas:" + JSON.toJSONString(taskResult)); } } } else { /** * Permintaan gagal diproses. Analisis kegagalan berdasarkan situasi aktual. */ System.out.println("Seluruh permintaan pemindaian gambar gagal. Respons:" + JSON.toJSONString(scrResponse)); } } } }Kirim aliran gambar biner untuk moderasi gambar
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.green.extension.uploader.ClientUploader; import com.aliyuncs.green.model.v20180509.ImageSyncScanRequest; import com.aliyuncs.http.FormatType; import com.aliyuncs.http.HttpResponse; import com.aliyuncs.http.MethodType; import com.aliyuncs.http.ProtocolType; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import org.apache.commons.io.FileUtils; import java.io.File; import java.util.*; public class Main { public static void main(String[] args) throws Exception { /** * Pasangan AccessKey dari akun Alibaba Cloud dapat digunakan untuk mengakses semua operasi API. Untuk mencegah masalah keamanan, kami sarankan Anda menggunakan pengguna RAM untuk mengakses operasi API dan melakukan O&M rutin. * Cara umum untuk mendapatkan variabel lingkungan: * Metode 1: * Dapatkan ID AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * Metode 2: * Dapatkan ID AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ DefaultProfile profile = DefaultProfile.getProfile( "cn-shanghai", "Kami sarankan Anda mendapatkan ID AccessKey dari pengguna RAM Anda dari variabel lingkungan", "Kami sarankan Anda mendapatkan Rahasia AccessKey dari pengguna RAM Anda dari variabel lingkungan"); DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com"); // Catatan: Kami sarankan Anda menggunakan kembali instansiasi klien sebanyak mungkin. Ini meningkatkan performa moderasi dan menghindari koneksi klien berulang. IAcsClient client = new DefaultAcsClient(profile); ImageSyncScanRequest imageSyncScanRequest = new ImageSyncScanRequest(); // Tentukan format respons dari operasi. imageSyncScanRequest.setAcceptFormat(FormatType.JSON); // Tentukan metode permintaan. imageSyncScanRequest.setMethod(MethodType.POST); imageSyncScanRequest.setEncoding("utf-8"); // Baik HTTP maupun HTTPS didukung. imageSyncScanRequest.setProtocol(ProtocolType.HTTP); JSONObject httpBody = new JSONObject(); /** * Tentukan skenario moderasi. Sistem akan menagih Anda berdasarkan skenario moderasi yang Anda tentukan. * Anda dapat mengirim permintaan untuk memoderasi beberapa gambar sekaligus dan menentukan beberapa skenario moderasi untuk setiap gambar. Biaya semua skenario dihitung secara terpisah dan dijumlahkan. * Sebagai contoh, jika Anda memoderasi dua gambar untuk pornografi dan konten teroris, Anda akan dikenakan biaya untuk memoderasi dua gambar untuk pornografi dan dua gambar untuk konten teroris. * Pada parameter scenes, nilai porn menunjukkan bahwa server mendeteksi pornografi. */ httpBody.put("scenes", Arrays.asList("porn")); /** * Jika Anda ingin memoderasi gambar lokal, gunakan potongan kode berikut untuk menghasilkan URL berdasarkan jalur penyimpanan gambar. * Kemudian, kirimkan URL gambar yang dihasilkan ke server. */ ClientUploader clientUploader = ClientUploader.getImageClientUploader(profile, false); byte[] imageBytes = null; String url = null; try{ // Baca dan konversi gambar lokal menjadi data biner dan kirimkan data biner untuk moderasi. Dalam kode aktual, gunakan langsung data biner gambar Anda. imageBytes = FileUtils.readFileToByteArray(new File("/Users/01fb4ab6420b5f34623e13b82b51ef87.jpg")); // Unggah aliran biner ke server. url = clientUploader.uploadBytes(imageBytes); }catch (Exception e){ e.printStackTrace(); throw e; } /** * Buat tugas untuk setiap gambar yang akan dimoderasi. * Jika Anda memoderasi beberapa gambar dalam satu permintaan, total waktu respons yang dihabiskan server untuk memproses permintaan dimulai saat permintaan dilakukan dan berakhir saat moderasi gambar terakhir selesai. * Secara umum, waktu respons rata-rata untuk memoderasi beberapa gambar dalam satu permintaan lebih lama daripada memoderasi satu gambar. Semakin banyak gambar yang Anda kirim sekaligus, semakin tinggi kemungkinan waktu respons rata-rata bertambah. * Dalam contoh ini, hanya satu gambar yang akan dimoderasi. Jika Anda ingin memoderasi beberapa gambar sekaligus, buat tugas untuk setiap gambar yang akan dimoderasi. */ JSONObject task = new JSONObject(); task.put("dataId", UUID.randomUUID().toString()); // Setel parameter url ke URL gambar yang dikirimkan ke server. URL tersebut mengandung karakter khusus dan harus dienkripsi. task.put("url", url); task.put("time", new Date()); httpBody.put("tasks", Arrays.asList(task)); imageSyncScanRequest.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()), "UTF-8", FormatType.JSON); /** * Tentukan periode timeout koneksi dan timeout baca. Periode timeout untuk server menyelesaikan permintaan moderasi gambar adalah 10 detik. * Jika Anda mengatur timeout baca menjadi periode kurang dari 10 detik, server mungkin menghasilkan kesalahan timeout baca selama pemrosesan permintaan. */ imageSyncScanRequest.setConnectTimeout(3000); imageSyncScanRequest.setReadTimeout(10000); HttpResponse httpResponse = null; try { httpResponse = client.doAction(imageSyncScanRequest); } catch (Exception e) { e.printStackTrace(); } // Hasil yang dikembalikan setelah server menerima dan memproses permintaan Anda. if (httpResponse != null && httpResponse.isSuccess()) { JSONObject scrResponse = JSON.parseObject(org.apache.commons.codec.binary.StringUtils.newStringUtf8(httpResponse.getHttpContent())); System.out.println(JSON.toJSONString(scrResponse, true)); int requestCode = scrResponse.getIntValue("code"); // Hasil moderasi semua gambar. JSONArray taskResults = scrResponse.getJSONArray("data"); if (200 == requestCode) { for (Object taskResult : taskResults) { // Hasil moderasi gambar tunggal. int taskCode = ((JSONObject) taskResult).getIntValue("code"); // Hasil moderasi gambar dalam skenario moderasi. Jika Anda menentukan beberapa skenario moderasi dalam permintaan, hasil moderasi gambar dalam setiap skenario akan dikembalikan. JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results"); if (200 == taskCode) { for (Object sceneResult : sceneResults) { String scene = ((JSONObject) sceneResult).getString("scene"); String suggestion = ((JSONObject) sceneResult).getString("suggestion"); // Ambil tindakan lebih lanjut berdasarkan nilai parameter scene dan suggestion. // Lakukan operasi berbeda pada gambar berdasarkan nilai parameter suggestion yang berbeda. Sebagai contoh, hapus gambar yang berisi konten yang tidak diinginkan. System.out.println("scene = [" + scene + "]"); System.out.println("suggestion = [" + suggestion + "]"); } } else { // Gambar tunggal gagal dimoderasi. Analisis kegagalan berdasarkan situasi aktual. System.out.println("Proses tugas gagal. Respons tugas:" + JSON.toJSONString(taskResult)); } } } else { /** * Permintaan gagal diproses. Analisis kegagalan berdasarkan situasi aktual. */ System.out.println("Seluruh permintaan pemindaian gambar gagal. Respons:" + JSON.toJSONString(scrResponse)); } } } }
Kirim tugas moderasi gambar asinkron
Bagian ini menjelaskan cara menggunakan Content Moderation SDK for Java untuk memanggil operasi ImageAsyncScanRequest dan memoderasi gambar terhadap konten berisiko. Anda dapat mengirim permintaan asinkron untuk menyerahkan tugas moderasi gambar. Saat Anda menyerahkan permintaan, Anda dapat menentukan URL callback untuk menerima hasil moderasi dengan menyetel parameter callback. Anda juga dapat memanggil operasi ImageAsyncScanResultsRequest untuk memantau hasil moderasi setelah Content Moderation memproses tugas moderasi gambar.
Seperti halnya moderasi gambar sinkron, Anda dapat menyerahkan URL gambar online, URL gambar lokal, atau aliran gambar biner untuk moderasi gambar asinkron. Dalam contoh ini, URL gambar online digunakan.
Operasi | Deskripsi | Wilayah yang Didukung |
ImageAsyncScanRequest | Mengirim permintaan asinkron untuk memoderasi gambar terhadap konten berisiko dalam beberapa skenario moderasi, termasuk pornografi, konten teroris, iklan, kode QR, adegan yang tidak diinginkan, dan deteksi logo. |
|
Contoh Kode
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.green.model.v20180509.ImageAsyncScanRequest;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import java.util.Arrays;
import java.util.Date;
import java.util.UUID;
public class Main {
public static void main(String[] args) throws Exception {
/**
* Pasangan AccessKey dari akun Alibaba Cloud dapat digunakan untuk mengakses semua operasi API. Untuk mencegah masalah keamanan, kami sarankan Anda menggunakan pengguna RAM untuk mengakses operasi API dan melakukan O&M rutin.
* Cara umum untuk mendapatkan variabel lingkungan:
* Metode 1:
* Dapatkan ID AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
* Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
* Metode 2:
* Dapatkan ID AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
* Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
*/
DefaultProfile profile = DefaultProfile.getProfile(
"cn-shanghai",
"Kami sarankan Anda mendapatkan ID AccessKey dari pengguna RAM Anda dari variabel lingkungan",
"Kami sarankan Anda mendapatkan Rahasia AccessKey dari pengguna RAM Anda dari variabel lingkungan");
DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
// Catatan: Kami sarankan Anda menggunakan kembali instansiasi klien sebanyak mungkin. Ini meningkatkan performa moderasi dan menghindari koneksi klien berulang.
IAcsClient client = new DefaultAcsClient(profile);
ImageAsyncScanRequest imageAsyncScanRequest = new ImageAsyncScanRequest();
// Tentukan format respons dari operasi.
imageAsyncScanRequest.setAcceptFormat(FormatType.JSON);
// Tentukan metode permintaan.
imageAsyncScanRequest.setMethod(MethodType.POST);
imageAsyncScanRequest.setEncoding("utf-8");
// Baik HTTP maupun HTTPS didukung.
imageAsyncScanRequest.setProtocol(ProtocolType.HTTP);
JSONObject httpBody = new JSONObject();
/**
* Tentukan skenario moderasi. Sistem akan menagih Anda berdasarkan skenario moderasi yang Anda tentukan.
* Anda dapat mengirim permintaan untuk memoderasi beberapa gambar sekaligus dan menentukan beberapa skenario moderasi untuk setiap gambar. Biaya semua skenario dihitung secara terpisah dan dijumlahkan.
* Sebagai contoh, jika Anda memoderasi dua gambar untuk pornografi dan konten teroris, Anda akan dikenakan biaya untuk memoderasi dua gambar untuk pornografi dan dua gambar untuk konten teroris.
* Pada parameter scenes, nilai porn menunjukkan bahwa server mendeteksi pornografi.
*/
httpBody.put("scenes", Arrays.asList("porn"));
httpBody.put("callback", "http://www.aliyundoc.com/xxx.json");
httpBody.put("seed", "yourPersonalSeed");
/**
* Buat tugas untuk setiap gambar yang akan dimoderasi. Anda dapat memoderasi maksimal 50 gambar sekaligus. Dalam hal ini, Anda harus membuat 50 tugas.
* Jika Anda memoderasi beberapa gambar dalam satu permintaan, total waktu respons yang dihabiskan server untuk memproses permintaan dimulai saat permintaan dilakukan dan berakhir saat moderasi gambar terakhir selesai.
* Secara umum, waktu respons rata-rata untuk memoderasi beberapa gambar dalam satu permintaan lebih lama daripada memoderasi satu gambar. Semakin banyak gambar yang Anda kirim sekaligus, semakin tinggi kemungkinan waktu respons rata-rata bertambah.
* Dalam contoh ini, hanya satu gambar yang akan dimoderasi. Jika Anda ingin memoderasi beberapa gambar sekaligus, buat tugas untuk setiap gambar yang akan dimoderasi.
*/
JSONObject task = new JSONObject();
task.put("dataId", UUID.randomUUID().toString());
// Tentukan URL gambar. URL tersebut mengandung karakter khusus dan harus dienkripsi.
task.put("url", "http://www.aliyundoc.com/xxx.test.jpg");
task.put("time", new Date());
httpBody.put("tasks", Arrays.asList(task));
imageAsyncScanRequest.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()),
"UTF-8", FormatType.JSON);
/**
* Tentukan periode timeout koneksi dan timeout baca. Periode timeout untuk server menyelesaikan permintaan moderasi gambar adalah 10 detik.
* Jika Anda mengatur timeout baca menjadi periode kurang dari 10 detik, server mungkin menghasilkan kesalahan timeout baca selama pemrosesan permintaan.
*/
imageAsyncScanRequest.setConnectTimeout(3000);
imageAsyncScanRequest.setReadTimeout(10000);
HttpResponse httpResponse = null;
try {
httpResponse = client.doAction(imageAsyncScanRequest);
} catch (Exception e) {
e.printStackTrace();
}
// Hasil yang dikembalikan setelah server menerima dan memproses permintaan Anda.
if (httpResponse != null && httpResponse.isSuccess()) {
JSONObject scrResponse = JSON.parseObject(org.apache.commons.codec.binary.StringUtils.newStringUtf8(httpResponse.getHttpContent()));
System.out.println(JSON.toJSONString(scrResponse, true));
int requestCode = scrResponse.getIntValue("code");
// Hasil moderasi semua gambar.
JSONArray taskResults = scrResponse.getJSONArray("data");
if (200 == requestCode) {
for (Object taskResult : taskResults) {
// Hasil moderasi gambar tunggal.
int taskCode = ((JSONObject) taskResult).getIntValue("code");
// Hasil moderasi gambar dalam skenario moderasi. Jika Anda menentukan beberapa skenario moderasi dalam permintaan, hasil moderasi gambar dalam setiap skenario akan dikembalikan.
JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results");
if (200 == taskCode) {
// Simpan ID tugas, yang digunakan untuk memantau hasil moderasi.
System.out.println(((JSONObject)taskResult).getString("taskId"));
} else {
// Gambar tunggal gagal dimoderasi. Analisis kegagalan berdasarkan situasi aktual.
System.out.println("Proses tugas gagal. Respons tugas:" + JSON.toJSONString(taskResult));
}
}
} else {
/**
* Permintaan gagal diproses. Analisis kegagalan berdasarkan situasi aktual.
*/
System.out.println("Seluruh permintaan pemindaian gambar gagal. Respons:" + JSON.toJSONString(scrResponse));
}
}
}
}Periksa hasil moderasi gambar asinkron
Operasi | Deskripsi | Wilayah yang Didukung |
ImageAsyncScanResultsRequest | Memeriksa hasil moderasi gambar asinkron. Anda dapat memeriksa hasil moderasi dari beberapa tugas moderasi gambar asinkron sekaligus. |
|
Contoh Kode
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.green.model.v20180509.ImageAsyncScanRequest;
import com.aliyuncs.green.model.v20180509.ImageAsyncScanResultsRequest;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
/**
* Pasangan AccessKey dari akun Alibaba Cloud dapat digunakan untuk mengakses semua operasi API. Untuk mencegah masalah keamanan, kami sarankan Anda menggunakan pengguna RAM untuk mengakses operasi API dan melakukan O&M rutin.
* Cara umum untuk mendapatkan variabel lingkungan:
* Metode 1:
* Dapatkan ID AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
* Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
* Metode 2:
* Dapatkan ID AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
* Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
*/
DefaultProfile profile = DefaultProfile.getProfile(
"cn-shanghai",
"Kami sarankan Anda mendapatkan ID AccessKey dari pengguna RAM Anda dari variabel lingkungan",
"Kami sarankan Anda mendapatkan Rahasia AccessKey dari pengguna RAM Anda dari variabel lingkungan");
DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
// Catatan: Kami sarankan Anda menggunakan kembali instansiasi klien sebanyak mungkin. Ini meningkatkan performa moderasi dan menghindari koneksi klien berulang.
IAcsClient client = new DefaultAcsClient(profile);
ImageAsyncScanResultsRequest imageAsyncScanResultsRequest = new ImageAsyncScanResultsRequest();
// Tentukan format respons dari operasi.
imageAsyncScanResultsRequest.setAcceptFormat(FormatType.JSON);
// Tentukan metode permintaan.
imageAsyncScanResultsRequest.setMethod(MethodType.POST);
imageAsyncScanResultsRequest.setEncoding("utf-8");
// Baik HTTP maupun HTTPS didukung.
imageAsyncScanResultsRequest.setProtocol(ProtocolType.HTTP);
List<String> taskIds = new ArrayList<String>();
taskIds.add("img4hDosCHcrFk5jAMR80XWJN-1pZ@0p");
imageAsyncScanResultsRequest.setHttpContent(JSON.toJSONString(taskIds).getBytes("UTF-8"), "UTF-8", FormatType.JSON);
/**
// Tentukan periode timeout koneksi dan timeout baca.
*/
imageAsyncScanResultsRequest.setConnectTimeout(3000);
imageAsyncScanResultsRequest.setReadTimeout(6000);
try {
HttpResponse httpResponse = client.doAction(imageAsyncScanResultsRequest);
if(httpResponse.isSuccess()){
JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
System.out.println(JSON.toJSONString(scrResponse, true));
if (200 == scrResponse.getInteger("code")) {
JSONArray taskResults = scrResponse.getJSONArray("data");
for (Object taskResult : taskResults) {
if(200 == ((JSONObject)taskResult).getInteger("code")){
JSONArray sceneResults = ((JSONObject)taskResult).getJSONArray("results");
for (Object sceneResult : sceneResults) {
String scene = ((JSONObject)sceneResult).getString("scene");
String suggestion = ((JSONObject)sceneResult).getString("suggestion");
// Ambil tindakan lebih lanjut berdasarkan nilai parameter scene dan suggestion.
// Lakukan operasi berbeda pada gambar berdasarkan nilai parameter suggestion yang berbeda. Sebagai contoh, hapus gambar yang berisi konten yang tidak diinginkan.
}
}else{
System.out.println("Proses tugas gagal:" + ((JSONObject)taskResult).getInteger("code"));
}
}
} else {
System.out.println("Deteksi tidak berhasil. Kode:" + scrResponse.getInteger("code"));
}
}else{
System.out.println("Respons tidak berhasil. Status:" + httpResponse.getStatus());
}
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
}Berikan umpan balik pada hasil moderasi gambar
Jika hasil moderasi gambar tidak sesuai dengan harapan Anda, Anda dapat memanggil operasi ImageScanFeedbackRequest untuk memodifikasi hasilnya. Content Moderation menambahkan gambar yang telah dimoderasi ke daftar hitam atau daftar putih gambar serupa berdasarkan umpan balik Anda. Saat Anda menyerahkan gambar serupa untuk moderasi, Content Moderation mengembalikan hasil moderasi berdasarkan label dalam umpan balik Anda.
Untuk informasi lebih lanjut, lihat /green/image/feedback.
Operasi | Deskripsi | Wilayah yang Didukung |
ImageScanFeedbackRequest | Memberikan umpan balik pada hasil moderasi gambar dan memodifikasi hasil moderasi berbasis mesin berdasarkan umpan balik. |
|
Contoh Kode
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.green.model.v20180509.ImageScanFeedbackRequest;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
/**
* Pasangan AccessKey dari akun Alibaba Cloud dapat digunakan untuk mengakses semua operasi API. Untuk mencegah masalah keamanan, kami sarankan Anda menggunakan pengguna RAM untuk mengakses operasi API dan melakukan O&M rutin.
* Cara umum untuk mendapatkan variabel lingkungan:
* Metode 1:
* Dapatkan ID AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
* Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
* Metode 2:
* Dapatkan ID AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
* Dapatkan Rahasia AccessKey dari pengguna RAM Anda: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
*/
DefaultProfile profile = DefaultProfile.getProfile(
"cn-shanghai",
"Kami sarankan Anda mendapatkan ID AccessKey dari pengguna RAM Anda dari variabel lingkungan",
"Kami sarankan Anda mendapatkan Rahasia AccessKey dari pengguna RAM Anda dari variabel lingkungan");
DefaultProfile.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
// Catatan: Kami sarankan Anda menggunakan kembali instansiasi klien sebanyak mungkin. Ini meningkatkan performa moderasi dan menghindari koneksi klien berulang.
IAcsClient client = new DefaultAcsClient(profile);
ImageScanFeedbackRequest imageScanFeedbackRequest = new ImageScanFeedbackRequest();
// Tentukan format respons dari operasi.
imageScanFeedbackRequest.setAcceptFormat(FormatType.JSON);
// Tentukan metode permintaan.
imageScanFeedbackRequest.setMethod(MethodType.POST);
imageScanFeedbackRequest.setEncoding("utf-8");
// Baik HTTP maupun HTTPS didukung.
imageScanFeedbackRequest.setProtocol(ProtocolType.HTTP);
// scenes: skenario moderasi. Anda dapat menentukan satu atau lebih skenario moderasi.
// suggestion: hasil moderasi yang Anda harapkan untuk dikembalikan. Nilai pass menunjukkan bahwa gambar yang dimoderasi normal. Nilai block menunjukkan bahwa gambar yang dimoderasi mengandung pelanggaran.
JSONObject httpBody = new JSONObject();
httpBody.put("suggestion", "block");
httpBody.put("scenes", Arrays.asList("ad", "terrorism"));
httpBody.put("url", "URL Gambar");
imageScanFeedbackRequest.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()),
"UTF-8", FormatType.JSON);
imageScanFeedbackRequest.setConnectTimeout(3000);
imageScanFeedbackRequest.setReadTimeout(10000);
try {
HttpResponse httpResponse = client.doAction(imageScanFeedbackRequest);
if (httpResponse.isSuccess()) {
JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
System.out.println(JSON.toJSONString(scrResponse, true));
if (200 == scrResponse.getInteger("code")) {
// Panggilan berhasil.
} else {
System.out.println("Deteksi tidak berhasil. Kode:" + scrResponse.getInteger("code"));
}
} else {
System.out.println("Respons tidak berhasil. Status:" + httpResponse.getStatus());
}
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}