20220601超简单百度地图街景图片爬取+绿视率计算

本文介绍了如何使用Python结合GIS进行百度地图街景图片的爬取,并通过开源爬虫项目实现。接着,利用Google Colab和MXNet进行图像语义分割,计算出街景图片的绿视率和天空率,涉及DeepLab模型。
摘要由CSDN通过智能技术生成

本文参考了以下三篇成果,分别有关经纬度提取、爬虫和语义分割:

基于GIS和Python的百度地图街景爬取 - 灰信网(软件开发博客聚合)基于GIS和Python的百度地图街景爬取,灰信网,软件开发博客聚合,程序员专属的优秀博客文章阅读平台。icon-default.png?t=M4ADhttps://www.freesion.com/article/6033578903/BaiduStreetViewSpider: 多角度百度街景图像抓取爬虫源码(Python) - 城市之光 – City of Light百度街景爬虫该项目用于根据指定的wgs84经纬度坐标获取对应位置的百度地图的街景图像。项目地址:https://github.com/whuyao/BaiduStreetViewSpider内容该文件夹主要包含一个用于获取街景的脚本文件和一个输出目录。baiduStreetViewSpider.pyhttps://www.urbancomp.net/archives/baidustreetviewspiderv1手把手教你5行代码实现街景图片语义分割并计算绿视率与天空率 - 云+社区 - 腾讯云icon-default.png?t=M4ADhttps://cloud.tencent.com/developer/article/1790563

准备街景采样点经纬度

首先,获取街景图片的经纬度需要准备路网数据。尝试了一下百度地图截获器,发现很久不更新了。。于是我买了基地的路网shp数据,这方面获取的方法有很多,可以QGIS,可以用Bigmap或者水经注这种软件。

拿到shp之后,使用Densify工具等距离增密道路的vertice,再通过Feature Vertices To Points转为采样点。经纬度坐标值可以使用Add XY Coordinates工具直接添加在属性表中。就可以获得一定间隔的路网经纬度点数据。

用表转excel工具,导出表格,后面爬虫里面要用。

运行街景图片爬虫

首先下载一下文章开头链接2的爬虫源码。爬虫下载下来,结构挺简单,是这样的:

 但是dir文件夹里,少了一个叫images的文件夹,自己新建一个空文件夹命名为images即可

然后看代码,找到读取的文件路径,替换成刚才准备好的文件:

 运行代码,就可以跑起来啦~

实现图像语义分割

这里建议使用google colab,配置起来很方便,而且还可以白嫖GPU~

用一张图做了测试,这部分完整代码如下:

# 安装依赖库,colab里安装新的包需要加!
# for mxnet
!pip install --upgrade mxnet
# for pytorch
!pip install torch==1.6.0+cpu torchvision==0.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html

!pip install --upgrade gluoncv


# 初始化
import mxnet as mx
from mxnet import image
import gluoncv
import matplotlib.pyplot as plt
from gluoncv.data.transforms.presets.segmentation import test_transform
from gluoncv.utils.viz import get_color_pallete,plot_image
import matplotlib.image as mpimg
import numpy as np
# using cpu
ctx = mx.cpu()

# 读取图片
img = image.imread('/content/d1.jpg')
img = test_transform(img,ctx)

# 调用model1,即用cityscapes训练出来的模型之一
model1 = gluoncv.model_zoo.get_model('deeplab_resnet101_citys', pretrained=True)

# 两个输出参数
output = model1.predict(img)
predict = mx.nd.squeeze(mx.nd.argmax(output, 1)).asnumpy()


# 解析输出参数
green = (predict==8)
print('绿视率为:',str(len(predict[green])/(predict.shape[0]*predict.shape[1])))
sky = (predict==10)
print('天空率为:',str(len(predict[sky])/(predict.shape[0]*predict.shape[1])))

# 可视化
mask = get_color_pallete(predict, 'citys')
base = mpimg.imread('/content/d1.jpg')
plt.figure(figsize=(10,5))
plt.imshow(base)
plt.imshow(mask,alpha=0.5)
plt.axis('off')
#plt.savefig('cd2_deeplab_citys.jpg',dpi=150,bbox_inches='tight')

也可以继续试下另一个模型模型,代码如下:

model2 = gluoncv.model_zoo.get_model('deeplab_resnet101_ade', pretrained=True)
output = model2.predict(img)
predict = mx.nd.squeeze(mx.nd.argmax(output, 1)).asnumpy()
mask = get_color_pallete(predict, 'ade20k')
green = (predict==4)
print('绿视率为:',str(len(predict[green])/(predict.shape[0]*predict.shape[1])))
sky = (predict==2)
print('天空率为:',str(len(predict[sky])/(predict.shape[0]*predict.shape[1])))

base = mpimg.imread('/content/d1.jpg')
plt.figure(figsize=(10,5))
plt.imshow(base)
plt.imshow(mask,alpha=0.5)
plt.axis('off')
plt.savefig('cd2_deeplab_ade.jpg',dpi=150,bbox_inches='tight')

在这张图上效果没有之前好:

 ok啦~

  • 33
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值