技能需求
- 熟悉神经网络基础
- 熟悉 Java 语言、Python 语言
- 熟悉基础的 Android 开发
需求
- 使用神经网络实现一个识别单个阿拉伯数字的 Android 组件。神经网络推理部分使用纯 Java 实现,训练部分可以用 Python ,也可以使用其它语言,不依赖 CUDA 。
- 对 (1) 中生成的模型进行微调,调高阈值,仅识别书写 "端正" 的阿拉伯数字
- 扩展 (1) 和 (2) 生成的手写识别组件,使之可以识别两位阿拉伯数字
为了方便开始任务,我先提供一些基础代码。我们可以用几十行代码开发一个 Android "手写板" 组件:
public class BrushView extends View {
private final Path path = new Path();
private final Paint paint = new Paint();
public BrushView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setColor(android.graphics.Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(10);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawPath(path, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(x, y);
break;
case MotionEvent.ACTION_MOVE:
path.lineTo(x, y);
break;
case MotionEvent.ACTION_UP:
break;
}
invalidate();
return true;
}
}
然后在 MainActivity 里加个这个东西,就可以开始测试了:
<com.example.BrushView
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#f8f8f8" />
下面说一下我对这个任务的理解。
需求一几乎就是神经网络的入门课,在网上你可以直接下载到公开的数据集,在 Python 中你可以用很少的代码搭建出一个模型,然后完成训练。
唯一有点工作量的大概是,针对采用的模型,手撸一个 Java 的神经网络出来。
识别阿拉伯数字这种任务大概手撸也不难,但是如果你要用现成的 Java 神经网络库,那也没问题。如果用现成的库,那么第一个需求几乎就是送分题了,唯一的工作量就是把这些东西整合到 Android 工程里去。
当用户输入一个数字后,Log.i 把数字打印出来。如果无法识别,Log.w 打印出来。
第二个任务是对模型进行调整,只识别 "书写端正" 的数字。
按我的理解,就是要在几千个数字中,对图片进行重新标注。本来有个潦草的 "4" 识别成 4 了,现在我希望把它识别成 Error 。
但是公开的数据集很大,要是这个标注很繁琐,那么就太痛苦了。因此,我希望标注的工作,可以使用 1 次鼠标点击来完成。比如鼠标滚轮可以让我一次查看几百张图,然后鼠标左键标记为正确,右键标记为错误。
这是个 GUI 程序,如果你熟悉 Python 可以用 PyQt ,如果你熟悉 C# 可以用 WinForms 。
当然,我对第二个任务的理解可能是有问题的,欢迎指正。如果你发现通过 Windows 资源管理器配合什么快捷键或者 TotalCommander 啥的可以达到等价的效率,那不写这个 GUI 程序也是可以的。
第三个任务有点超出我的认知范围了,或许可以用 "识别单个阿拉伯数字" 组合一下,让它能识别两位阿拉伯数字?你需要能帮我解第三个问题,这才是我花钱的目的。
交付物品
- 带手写识别的 Android 组件 (识别结果通过 Log 打出来) 不潦草认真写时,识别率在 95% 以上
- 训练脚本 (Python) 不要依赖 CUDA
- 模型微调工具,操作要便捷。接单人需要帮我做一轮调整,结项后我能自己微调
报酬
- 暂定每个需求 500 ,总计 1500 ,分 3 期支付
(先看看这个价有没有人接,欢迎吐槽)
联系方式
- NDQ5MDYyMjk2Cg==
