技能需求
需求
为了方便开始任务,我先提供一些基础代码。我们可以用几十行代码开发一个 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 程序也是可以的。
第三个任务有点超出我的认知范围了,或许可以用 "识别单个阿拉伯数字" 组合一下,让它能识别两位阿拉伯数字?你需要能帮我解第三个问题,这才是我花钱的目的。
交付物品
报酬
(先看看这个价有没有人接,欢迎吐槽)
联系方式
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.