Я отвечу в 3 частях, поскольку ваша проблема явно большая, и я очень рекомендую ручной метод с дешевой рабочей силой, если количество страниц не превышает 1000.
Часть 1:
Извлечение функций - в поле обнаружения объекта вы можете выбирать из множества объектов. Поскольку одним из ваших требований является неизменность вращения, я бы порекомендовал класс функций SIFT / SURF. Вы также можете найти уголки Харриса и т.д. Решение о том, какие функции использовать, может потребовать экспертных знаний, и если у вас есть вычислительные мощности, я бы порекомендовал создать хороший набор функций и передать его через оценщик важности, основанный на обучении.
Часть 2:
Выбор классификатора - я большой поклонник классификатора Random Forest . Концепция очень проста для понимания, она очень гибкая и непараметрическая. Для настройки требуется очень мало параметров, и вы также можете запустить ее в режиме выбора параметров во время контролируемой тренировки.
Часть 3:
Реализация - Python по сути является клеевым языком. Чистая реализация Python для обработки изображений никогда не будет очень быстрой. Я рекомендую использовать комбинацию OpenCV для обнаружения признаков и R для статистической работы и классификаторов.
Решение может показаться чрезмерно сложным, но машинное обучение никогда не было простой задачей, даже если разница между страницами заключается просто в том, что они являются левой и правой страницами книги.