下面说一下基于图像识别汉化方法的大致步骤
1 K6 i1 k2 K8 c( s0 K2 R
" R! G. v* t7 s1. 提取画面指纹特征数据
8 ]) H) h9 l" z; `我们要对画面进行图像识别,首先要对画面的种类进行一个大致的判断。
/ F. R' y- H x比如这个画面是主菜单画面还是对话选择画面还是对话显示画面等等。
/ D2 c/ d! S4 |! l5 c5 F5 @$ r2 b如何实现呢?我们可以通过比对画面指纹特征数据来实现。 * l2 \ R( Q6 \) }4 @
所谓画面指纹特征数据,就是在画面中提取一小块特殊的图像块,这个图像块在别的画面里是不可能有的,如果画面中出现了这图像块的话,我们就可以认为当前的画面是某一类画面,接下去可以进行进一步的比较和判断。
" H2 K8 G( m& s' `
( b: @/ b' s4 n) p) R$ k8 D作为画面指纹特征数据的图像块如何提取呢? / f& T6 j0 H- Z; |' ^8 ^% N/ Q
这个我想不是太难,首先在画面上寻找一个具有特色的在别的画面里是不可能有的小区域,用抓图软件抓取为bmp格式就行了,为了比对的方便,可能要进行某种方式的格式转换,比如转换为dds,raw格式等,具体如何可以在编码阶段再决定。注意,这个图像块不能太大,而且要具有唯一性。
8 O+ \9 o3 Y, h" k7 N) v7 k6 I
$ d- B9 H/ K4 Z5 ^2. 寻找用来表示字幕ID的最佳字符
" |5 F# `5 d/ Z- }8 ^$ j这个标题估计就会有人看不懂。
) T( @0 I2 A' b" Y: \( g我们用图像识别来判断当前画面上显示的字幕是什么,当然希望用来识别的字幕的样子尽量简单,否则用程序很难识别。但是,有的游戏的图片字库是加密的,字体的样子是无法改变的,或许还是不等宽字体,任意2个字符在显示的时候的间距都不太一样。
9 H! c: \- y! U# O+ Q! w o
. [- U% k8 M; Q, b7 H9 L# Z& ?这一个有一个的难题摆在我们面前,到底有没有办法解决呢。
* e8 p- M+ l( T* k& {我想是有的,对,我想到了条形码。我们可以让游戏的字幕用类似条形码的方式显示出来,这样应该就比较容易判断了。有的朋友可能又要糊涂了,游戏的字幕如何转化为条形码呢? ) V6 N- H) y: C1 ?; j7 D/ \
! p! e+ t: v1 o其实稍微动动脑子就很容易找到答案。条形码是什么?不就是竖条和空格组成的码吗?在图片字库里面虽然没有竖条,但是有很多形状类似的字符啊。比如T , L ,I 等等,我们都可以拿来用,空格就不用说了,字库里肯定有。 [# a3 k: K! Q
" @' T6 ?" _* h( f, @0 k4 N
聪明的朋友应该已经明白一大半了。。。 , n& P" r+ b6 F3 ^# f! ?1 f0 ?
' u S4 C8 D) ~4 g8 D( I% L待续 |