python实现物体定位

前段时间利用实验室的器材写了一个小小的项目,简单的整理了一下(并不完善),现在分享一下。实验的内容是:使用卫星定位信息接收器,接收物体的位置信息(包括经度纬度等等),然后解析这些数据,然后根据经度纬度等信息通关百度地图API获取物体的具体位置信息,实现对物体的定位!

我使用的开发语言重要是python,主要的有:serial串口通信,MySQLdb库,urllib2库,httplib库等等。下面就开始简单的说说实验中的问题。

1.首先使用的串口通信接收卫星接收器传出来的信息,我使用串口助手看了一下接收到的信息的样式,大概如下:

上图就是实验过程中的数据部分,我主要提取出来的是时间,海拔,经度,维度等信息。可以看出这些数据并不是单独成行的所以我需要将他们一个一个的提取出来(这并不是很难),然后利用经度纬度信息,使用百度地图API提供的地址解析服务获取物体的具体位置的描述,我使用的是一个HTTP服务,返回的是一个json的格式的位置信息,我事先测试库一下,返回的json格式的位置信息大概如下所示:

然后我从中获取具体位置描述信息,然后将它保存到数据库中。另外在试验中我使用了两张表,一张记录从从串口提取出来的信息,一张保存解析后的位置信息,而这两张表有相同的一项,就是时间,表的内容后面我会以图片的形式放出来。下面就附上我的代码,然后给出实验的结果。

# coding:utf8
'''
Created on 2016年6月14日
@author: zou
'''
import serial
import MySQLdb
import urllib2
import urllib
import httplib
import json
import time

ser = serial.Serial('COM4',9600)
######################################################
def recv(serial):
    data=''
    while True:
        tmp = serial.read(1)
        if tmp == '\n':
            break
        else:
            data += tmp

    return data
######################################################
def GetInfo(Str):
    info = []
    tmp = Str[7:]
    strs=''
    for ch in tmp:
        if ch == '\n':
            return
        else:
            if ch == ',':
                info.append(strs)
                strs = ''
            else:
                strs = strs+ch

    return info
######################################################

def getYear(data):
    retdata = ''
    ret = ''
    tail = data
    #print tail
    tail = tail[::-1]
    #print tail
    count = 0
    for ch in tail:
        if count == 3:  #616022
            if ch == ',':
                break
            else:
                ret += ch
        elif ch == ',':
            count=count+1

    #print ret
    retdata+=ret[1]
    retdata+=ret[0]
    retdata+=ret[3]
    retdata+=ret[2]
    retdata+=ret[5]
    retdata+=ret[4]
    #print retdata
    return retdata
######################################################
def rightNum(strs,flag):
    ret=''
    if cmp(flag,'t')==0:
        #times      024335.00
        ret=strs[0:2]
        ret+=':'
        ret+=strs[2:4]
        ret+=':'
        ret+=strs[4:6]
    elif cmp(flag,'l')==0:#latitude   3422.99947N
        if int(strs[0:3]) < 180:
            ret=strs[0:3]
            ret+='.'
            ret+=strs[3:5]
            ret+=strs[6:10]
        else:
            ret=strs[0:2]
            ret+='.'
            ret+=strs[2:4]
            ret+=strs[5:9]
    elif cmp(flag,'L')==0:#longitude  10858.95306E
        if int(strs[0:3]) < 180:
            ret=strs[0:3]
            ret+='.'
            ret+=strs[3:5]
            ret+=strs[6:10]
        else:
            ret=strs[0:2]
            ret+='.'
            ret+=strs[2:4]
            ret+=strs[5:9]
    else:
        return None

    return ret
#########################################################
def Getlocation(db,ti,la,lo):
    #发送http请求获取具体位置信息
    #import urllib
    url = 'http://api.map.baidu.com/geocoder/v2/'
    ak = 'ak=1aZ2PQG7OXlk9E41QPvB9WjEgq5WO8Do'
    #back='&callback=renderReverse&location='
    back='&location='
    location='34.992654,108.589507'
    output = '&output=json&pois=0'
    url = url + '?' + ak + back + location + output

    temp = urllib2.urlopen(url)
    hjson = json.loads(temp.read())
    locate = hjson["result"]["formatted_address"] #省,市,县
    #print locate
    mapinfo = hjson["result"]["sematic_description"]  #详细描述
    #print mapinfo
    #插入数据库
    cur = db.cursor()
    sql="set names utf8"
    cur.execute(sql)
    info=[]
    info.append(ti.encode('utf8'))
    info.append(locate.encode('utf8'))
    info.append(mapinfo.encode('utf8'))

    for val in info:
        print val

    sql = "insert into mapinfo values(%s,%s,%s)"
    try:
        cur.execute(sql,info)
    except:
        print 'Insert mapinfo failed'

#########################################################
#mysql , 经度,维度
db = MySQLdb.connect('localhost','root','',"zou",3306,'utf8')
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS Location")
cursor.execute("DROP TABLE IF EXISTS mapinfo")

sql="""CREATE TABLE Location(
        Time CHAR(20),
        Latitude CHAR(15),
        Longitude CHAR(15),
        Altitude CHAR(10))"""
cursor.execute(sql)
sql = """CREATE TABLE mapinfo(
        time CHAR(20),
        local CHAR(100),
        info CHAR(100))"""
cursor.execute(sql)

'''
#mysql , 位置描述信息
#database = MySQLdb.connect('localhost','root','',"zou",3306)
#curkey = database.cursor()
#curkey.execute("DROP TABLE IF EXISTS mapinfo")

msql = """CREATE TABLE mapinfo(
        time CHAR(20),
        local CHAR(100),
        info CHAR(100))"""
curkey.execute(msql)
'''

##################################################################
Locat = []  ####
#提取20项数据
count=0
while count<10:
    Info=[]
    year=''
    #如果输出为 $GPGGA 开头,则这一行表示的是位置信息
    for val in range(0,8):
        data = recv(ser)
        tmp = data[0:6] #截取前6个字符
        if cmp(tmp,'$GPRMC') == 0:
            #print data
            tmpyear = data[50:]
            year = getYear(tmpyear)
            #print year
        elif cmp(tmp,'$GPGGA') == 0:  #条件满足的话就截取
            #print data
            Info = GetInfo(data)

    if Info == []:
        break
    value=[]
    ti = year
    ti += '-'
    t = rightNum(Info[0],'t')
    ti += t
    #print ti
    value.append(ti)
    la = rightNum(Info[1],'l')
    value.append(la)
    lo = rightNum(Info[3],'L')
    value.append(lo)
    al = Info[8]
    value.append(al)
    #print value

    sql = "insert into Location values (%s,%s,%s,%s)"

    try:
        cursor.execute(sql,value)
        Getlocation(db,ti,la,lo)
        db.commit()
    except:
        print 'insert error'

    count=count+1
    #print count

db.close()
############################################################

#关闭端口
ser.close()

实验的结果如下:

相应的两张表的内容如下:

到这里这个实验的内容说完了,大家若是有什么问题的话欢迎给我留言。

时间: 2024-10-16 02:09:15

python实现物体定位的相关文章

Selenium2+python自动化28-table定位【转载】

前言 在web页面中经常会遇到table表格,特别是后台操作页面比较常见.本篇详细讲解table表格如何定位. 一.认识table 1.首先看下table长什么样,如下图,这种网状表格的都是table 2.源码如下:(用txt文本保存,后缀改成html) <!DOCTYPE html><meta charset="UTF-8"> <!-- for HTML5 --><meta http-equiv="Content-Type"

R-CNN论文翻译——用于精确物体定位和语义分割的丰富特征层次结构

原文地址 我对深度学习应用于物体检测的开山之作R-CNN的论文进行了主要部分的翻译工作,R-CNN通过引入CNN让物体检测的性能水平上升了一个档次,但该文的想法比较自然原始,估计作者在写作的过程中已经意识到这个问题,所以文中也对未来的改进提出了些许的想法,未来我将继续翻译SPPNet.fast-RCNN.faster-RCNN.mask-RCNN等一系列物体定位和语义分割领域的重要论文,主要作者都是Ross Girshick和Kaiming He. 用于精确物体定位和语义分割的丰富特征层次结构

Selenium2+python自动化28-table定位

前言 在web页面中经常会遇到table表格,特别是后台操作页面比较常见.本篇详细讲解table表格如何定位. 一.认识table 1.首先看下table长什么样,如下图,这种网状表格的都是table 2.源码如下:(用txt文本保存,后缀改成html) <!DOCTYPE html><meta charset="UTF-8"> <!-- for HTML5 --><meta http-equiv="Content-Type"

python selenium xpath定位时使用变量

driver.find_element_by_xpath(input[@id = "kw"]) 上面的代码,相信很多学习selenium + python 的朋友都很熟悉,就是定位百度首页搜索框的代码,如果我们想把"kw",用一个变量来表示该怎么操作呢? 目前,我知道的有两种方法,如下,是定位百度搜索框,点击搜索的代码,在XPath定位的过程中,用了变量: # encoding:utf-8 from selenium import webdriver import

python selenium 元素定位(三)

上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到这个元素,我们从能对这个元素进行操作,那么我们下来看看如何来定位元素. selenium 提供了8中元素定位的方法(大家要学习元素的定位,首先可以学习下前端的基础知识,这样有利于我们学习自动化测试,大家可以看一下:http://www.runoob.com/) find_element_by_id

Python中元素定位探讨

以下以阿里云(10.10.1.11)系统中考试答题为例进行了python脚本的编写研究.—————————————————————————————————————————————————————————————————————————————————— #coding=utf-8from selenium import webdriver#引入ActionChains类from selenium.webdriver.common.action_chains import ActionChains

appium+python自动化30-list定位(find_elements)

前言 有时候页面上没有id属性,并且其它的属性不唯一,平常用的比较多的是单数(element)的定位方法,遇到元素属性不唯一,就无法直接定位到了. 于是我们可以通过复数(elements)定位,先定位一组元素,再通过下标取出元素,这样也是可以定位到元素的. 单数与复数 1.find_element开头的是13种单数定位 2.find_elements开头是13种复数定位 定位一组对象 1.对比用单数定位find_element和复数定位find_elements定位元素的结果 # coding:

selenium+python之元素定位方式介绍

网页自动化测试最基本的要求就是要定位到各个元素,然后才能对该元素进行各种操作(输入,点击,清除,提交等),所以今天来总结下Selenuim+Python最基本的几种定位方式及实例说明, 以百度搜索输入框为例,用谷歌浏览器具体说明各个定位方式的用法. 1.导入selenium包的webdriver方法 输入 from selenium import webdriver 2.从 time 模块中引入sleep函数,使用sleep函数可以让程序休眠 输入 from time import sleep

selenium+python 使用路径定位各个浏览器

构建Python+Selenium2自动化测试环境<二>:IE.Chrome和Firefox运行:http://blog.csdn.net/candle806/article/details/9023873 AttributeError: 'str' object has no attribute 'native_events_enabled' 这个问题答案链接:http://bbs.csdn.net/topics/390871818