我目前参与了一个项目,我们使用 python 执行了一些计算机视觉对象识别和分类。必须使用从安卓手机拍摄的照片(照片应该从安卓自动发送到python)。我实际上不知道应该如何将两个应用程序(android 和 python)连接在一起。我想过使用 TCP Server,但我是套接字编程的新手,不知道如何以及从哪里开始。
任何人都可以帮忙吗?
Android 为您提供通过 HTTP 连接的选项。
http://developer.android.com/guide/topics/connectivity/index.html
所以我可能会选择 REST 类型的实现
https://en.wikipedia.org/wiki/Representational_state_transfer
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
这是Android和REST的教程
http://www.majidkhosravi.com/android-rest/
但是你正在处理图片。这是一个谈论这个的SO。
在 Python 方面,您有多种选择,但我会考虑的主要选择:
如果您想要异步,请使用 Twisted(或者可能是 Tornado)。
http://twistedmatrix.com/trac/wiki/WebDevelopmentWithTwisted
http://zenmachine.wordpress.com/web-services-and-twisted/
用于同步的烧瓶。
http://flask-restful.readthedocs.org/en/latest/quickstart.html
也许 Nginx/Apache + Django
http://django-rest-framework.org/
所以关于 Python 和 REST 的帖子
如果您想在套接字级别实现这一点,这本书将是一个很好的资源:
http://www.amazon.com/Foundations-Python-Network-Programming-Goerzen/dp/1590593715
希望这有助于为您提供一些探索方向。
poof 的回答是一个很好的概述,但这里有一些关于各种选项的注释:
选项 1:让您的 Android 获取图片并向运行 Django 等框架的 Python 应用程序执行 HTTP POST。它应该是 Android 上的 1 行代码,而 Python 上只有几行代码(围绕您现有的代码)。
好处是低级的“胶水”是为你编写的,它很容易扩展。缺点是 HTTP 有一些开销。
选项 2:让您的 Android 将自定义 TCP 协议与自定义 TCP 应用程序通信。
这是更多的工作,所以你应该避免它,除非你需要它。它将更高效并且延迟更低,尤其是在您发送多张图片时。如果没有 HTTP 标头,响应也可以小得多。
在任一选项中,您都不必发送 JPEG,您可以发送任何您想要的自定义格式(在 Android 上的压缩和文件大小之间需要权衡)。
我想过使用 TCP Server,但我是套接字编程的新手,不知道如何以及从哪里开始。
从其他人开始的地方开始——通过大量阅读和大量玩耍。您可以在网络上找到大量关于 Python 中 Socket 编程的介绍。浏览教程,然后开始修改它们以查看它们是如何工作的。阅读 TCP/IP 本身——有很多黑暗的角落(Nagel、碎片、慢启动)会影响你在低级别时编写应用程序的方式。