Несколько вопросов по работе со сканами на андроиде?

Ссылка скопирована
1 ответ

Пожалуйста, поделитесь информацией полезной для реализации фотосканера.
В простейшем случае получается такая цепочка : Установи CamScaner - сканируй - распечатай.
Посмотрим подробнее что делает Camscaner
1) снимок
2) поиск углов
3) обрезка с исправлением перспективы
4) очистка от шума
при необходимости повторить 1-4
5) генерация pdf (обычно одно фото на листе)
6) поделиться или вызвать адаптер печати

По пунктам
1) Сделать снимок можно как в режиме "Живой камеры", так и на минималках (просто обратиться к операционке, что тебе нужна фотография с камеры, которую нужно записать в созданный тобой content)
На практике где-то меньше 50 строк кода, это вместе с манифестом и прочим.

2) Поиск углов. Не нашел решений без использования OpenCV. А если включить в проект, то сразу распухает на десятки мегабайт :(

3) Есть ли готовые кроперы с исправлением перспективы в виде сдк ?

4) Без бакендов , без использования машинного зрения. Идеально чтобы апач или мит лицензия. Есть такое ?

5) Можно и без всяких библиотек сделать. Там буквально 300 строк кода. Заголовок файла. trailer. xref. и собрать страницы.

6) Элементарно

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Стас DB Ответ

Для работы со сканами на Android у вас могут возникнуть несколько вопросов, такие как как захватить изображение с камеры, как обработать изображение после сканирования, как сохранить скан в памяти устройства и другие. В этом ответе я постараюсь рассмотреть основные аспекты работы со сканами на Android.

1. Захват изображения с камеры:
Для захвата изображения с камеры на Android вы можете использовать стандартный Intent для запуска камеры и получения изображения. Вот пример кода на языке программирования Java:

private static final int REQUEST_IMAGE_CAPTURE = 1;
 
private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}
 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        // Далее можно использовать полученное изображение
    }
}

private static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); // Далее можно использовать полученное изображение } }

2. Обработка изображения после сканирования:
После получения изображения с камеры, вы можете обработать его с помощью различных библиотек для работы с изображениями. Например, вы можете использовать OpenCV для обработки изображений. Вот пример кода на языке программирования Java:

Mat image = Imgcodecs.imread("path/to/image.jpg");
// Далее можно проводить обработку изображения

Mat image = Imgcodecs.imread("path/to/image.jpg"); // Далее можно проводить обработку изображения

3. Сохранение скана в памяти устройства:
Для сохранения скана в памяти устройства вы можете использовать внутреннее хранилище приложения или внешнее хранилище, такое как SD-карта. Вот пример кода на языке программирования Java:

String path = Environment.getExternalStorageDirectory().toString();
File file = new File(path, "scan.jpg");
try {
    FileOutputStream out = new FileOutputStream(file);
    imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
    out.flush();
    out.close();
} catch (Exception e) {
    e.printStackTrace();
}

String path = Environment.getExternalStorageDirectory().toString(); File file = new File(path, "scan.jpg"); try { FileOutputStream out = new FileOutputStream(file); imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); }

Надеюсь, эти примеры помогут вам разобраться с основными аспектами работы со сканами на Android. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно