osfans / trime

同文安卓輸入法平臺3.x/Android-rime/Rime Input Method Engine for Android
http://osfans.github.io/trime/
GNU General Public License v3.0
3.09k stars 372 forks source link

我们应该以何种方式增加手写输入功能? #495

Closed tumuyan closed 1 year ago

tumuyan commented 3 years ago

触摸屏的设备使用手写输入其实一直是标配,所以问题根本不是需要不需要,而是以何种方式实现。

同文群群友推荐了这个项目: https://github.com/yinzhengwei/SoftWareTest 虽然停滞开发多年,但是我试用一下感觉识别效果还行。GPL协议,问题不大。

我觉得可以先讨论一下:

  1. 我们用胶水方案的方式解决问题(手写识别后直接显示到候选栏,完全忽略rime原有的悬浮窗、滤镜、词库等方面的设计),是否合适?
  2. 是否使用这个项目作为手写识别方案?或者有其他的推荐?
  3. 应该如何导入这个项目?考虑到原项目已经停滞开发,我认为可以直接拷贝预编译的so文件,不再引用原项目的仓库。JNI接口的部分复制该仓库代码,UI相关的部分我们重写一下。
walk143 commented 3 years ago

关于动机:对使用Rime的人群来说,手写需要占比极少吧。

rainhear commented 3 years ago

對於音碼用戶還是有一定用處的,不會形碼的情況下,可以手寫輸出文字,或查詢音碼方案的編碼。

tumuyan commented 3 years ago

关于动机:对使用Rime的人群来说,手写需要占比极少吧。

对纯音码用户来说,使用并不熟练的第二方案,还不如直接手写。

内置手写方案的劣势在于安装包又会变大几M…

tumuyan commented 3 years ago

@Bambooin @WhiredPlanck 对手写方案,你们有什么看法?

  1. 我觉得可以用胶水方案,直接使用例子里的so文件,重用现有主题,就像liquidKeyboard一样隐藏键盘显示手写面板。候选词现实到现有候选栏,不重用悬浮窗。劣势是安装包体积会翻倍,即使不内置手写数据,由用户自行下载,也会明显增加体积。
  2. 或者给同文做一个接口,手写方案作为单独安装的安装包不放到同文项目内。点击同文的一个按键弹出手写悬浮窗,手写识别成功后,通过调用intent,透过同文上屏。为了提高安全性,可以在使用intent时生成一个uuid作参数来简单鉴权。 劣势是UI不会和原有键盘融合,只能弹出一个悬浮窗…
Bambooin commented 3 years ago

关于动机:对使用Rime的人群来说,手写需要占比极少吧。

我觉得需求极少,但是方案1 如果效果很好的话,可以尝试一下

tumuyan commented 3 years ago

由于该项目有so文件是预编译的,并且没有提供源码或者来源,作者也没有回复,因此不适合内置到rime项目中。 已经在按方案二的方式实现,拟定调用流程为:

  1. 触发手写开关
  2. 同文生成新的rsa密钥。
  3. 生成一个intent打开指定前台server (即手写App的服务),并传递键盘高度参数、是否使用背景、按键参数(用于设定按键:重写、退出)、公钥。
  4. 手写App服务显示悬浮窗。
  5. 手写并识别,用户选择候选后,把文字使用公钥加密,发送广播给同文
  6. 同文接受到广播,检查intent是否当前授权的包名发送的,使用私钥解密,得到非空字符串时执行上屏动作
  7. 循环5-6
  8. 手写结束,点击按钮悬浮窗隐藏。

特别的: 当同文键盘隐藏时,通知悬浮窗隐藏 当手写App监控到前台App变化,自动隐藏

使用这个流程,我们也可以编译包含商业公司sdk的语音 手写扩展。

@Bambooin @WhiredPlanck 请你们再看下这样的设计是否可以接受?
特别是我不确认这个设计是否还有安全上的问题?或者说没有必要花资源去走加密,直接生成一个token原样回传就够了?

视频为demo,只传递了键盘高度参数,手写使用透明背景。 https://user-images.githubusercontent.com/3126801/132956097-a10354cf-bf7d-4540-a867-797de06c959c.mp4

zhin2929 commented 2 years ago

体积翻倍我觉得没什么,保持在30m以下就可以了。现在应用好多都是大体积

tumuyan commented 2 years ago

@Bambooin 我们需要再讨论下给其他App接口的问题。

Bambooin commented 2 years ago

Do you mean that Trime provides public API or intents to others App?

tumuyan commented 2 years ago

Do you mean that Trime provides public API or intents to others App?

yes

tumuyan commented 2 years ago

@Bambooin
An API can be a good balance between application size, permissions, functionality, and licenses. Not only is it possible to use handwriting as previously discussed, but also @WhiredPlanck recommends a open source speech recognition project. https://alphacephei.com/vosk/models https://github.com/alphacep/vosk-android-demo

Bambooin commented 1 year ago

We don't have enough resource to implement this feature right now.