Olá Thales, tudo bem?
Até podemos utilizar a mesma base dos componentes de Haar mas treinado do zero, mas eu não aconselho pois desprezaríamos informações relevantes das cores e regiões mais complexas e prejudicaria bastante sua performance.
Nesse caso, vc pode utilizar a extração de ROI como você fez desde que a as regiões sejam estáticas. Do contrário pode aplicar algum detector de bordas como o Canny. Aqui vc tem uma boa referência na documentação e existem diversos artigos que explicam como implementá-lo.
Agora para você treinar essas peças, eu aconselho utilizar a abordagem mais moderna de redes neurais profundas, utilizando transferência de aprendizado e escalando modelos já prontos, como o VGG16, Alexnet, dentre outros. Neste link você tem a relação de quais modelos você pode utilizar e neste explica como funciona todo o processo.
PS: Quero me organizar para gravar um curso de transfer learning! :)
Um abraço!