ConorPai

迷路小分队成员

  • 主页
所有文章 更多内容 关于我

ConorPai

迷路小分队成员

  • 主页

使用GDI+绘制Image拼接处出现白边的问题

2018-05-30

最近发现瓦片地图有白边,看起来比较难受(效果如下),所以想办法处理一下。
白边

查找原因

最开始以为是坐标转换时出现的精度损失,因为瓦片都是地图坐标(double),需要转成屏幕逻辑坐标(float),如果出现精度损失就会出现两个瓦片接不上的问题。

但是通过调试发现这个过程逻辑坐标都是正常的,在缝隙处两个瓦片的坐标是相接的。

所以怀疑在逻辑坐标(float)向屏幕像素坐标(int)转换时出问题了,但是这个过程是GDI+绘制的,所以考虑需要通过设置选项来控制的。

解决方案

在网上搜到了这篇资料,测试可以解决。主要是以下几行代码:

1
2
3
4
5
ImageAttributes imAtt;
imAtt.SetWrapMode(WrapModeTileFlipXY);
graphics->SetInterpolationMode(InterpolationModeNearestNeighbor);
graphics->SetPixelOffsetMode(PixelOffsetModeHalf);
graphics->DrawImage(&image, zoomRect, 0, 0, image.GetWidth(), image.GetHeight(), UnitPixel, &imAtt);

改正后效果:
正常

  • C++

展开全文 >>

解决pip3的cannot import name main问题

2018-05-28

今天试用了win10的linux子系统,当配置python3环境时,升级pip3遇到了’cannot import name main’问题

1
2
3
4
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main
ImportError: cannot import name main

解决方法是修改文件:

1
vim /usr/bin/pip3

原内容是:

1
2
from pip import main
sys.exit(main())

修改为:

1
2
3
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())

保存后就可用了。

以上参考:https://qiujunya.com/pip3mainproblem.html。

  • python

展开全文 >>

使用OpenCV和TensorFlow实现猫主子识别(-)——提取猫脸图片

2018-05-10

最近某端公司部门技术分享想做一个老板检测软件,即一旦老板出现则马上报警-_-!!!。
我也大概想了一下实现思路,而且搜到了OpenCV自带了猫脸检测的分类器,突发奇想干脆给我家五只猫主子做一个动态识别器吧。

1
2
3
4
5
实现分为几个步骤:
1.随机截取五只猫主子的猫脸图片,并进行保存
2.对猫脸图片进行分类标注
3.使用TensorFlow对分类标注结果进行训练
4.对监测时截取的猫脸图片进行识别,看是哪位猫主子飘过

今天实现第一步:随机截取五只猫主子的猫脸图片,并进行保存。

猫脸检测分类器在GitHub上可以下载到,其中的haarcascade_frontalcatface.xml和haarcascade_frontalcatface_extended.xml即为猫脸检测的分类器(还有一些其它的分类器,比如人脸检测、笑脸检测、眼睛检测等,有兴趣的可以都试一下)。

OpenCV使用的检测方法是detectMultiScale(),此方法的作用是,在输入图像中检测不同尺寸的对象,返回包含对象的矩形框。它接收的参数:

1
2
3
4
5
1.image——输入图像
2.scaleFactor——表示每轮检测图像齿轮减少的比例
3.minNeighbors——指明对象要至少被检测到几次才能判定对象确实存在
4.minSize——检测对象的最小尺寸
5.maxSize——检测对象的最大尺寸

完整实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#coding=utf-8
#作用:从摄像头中提取识别出来的猫脸图片,保存并准备进行下一阶段训练使用
#引用相关库
import cv2
import datetime
#使用OpenCV打开摄像头
cap = cv2.VideoCapture(0)
#分类器初始化
cascade_path = 'haarcascade_frontalcatface_extended.xml'
cascade = cv2.CascadeClassifier(cascade_path)
#循环读取摄像头中的每一帧画面
while cap.isOpened():
#读取一帧画面
_, frame = cap.read()
#灰度处理
frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#猫脸检测
facerect = cascade.detectMultiScale(frame_gray, scaleFactor=1.1, minNeighbors=5, minSize=(5, 5))
#如果检测到结果
if len(facerect) > 0:
#输出日志
print('face detected')
#获取当前时间,用来保存该帧画面及猫脸图片
t = datetime.datetime.now()
#循环遍历检测到的猫脸区域
for (i, (x, y, w, h)) in enumerate(facerect):
#在猫脸区域画出方框
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 255), thickness=2)
#使用ROI获取猫脸区域图像
roiImg = frame[y:y + h, x:x + w]
#将猫脸区域图像保存成文件
cv2.imwrite('save/' + str(t) + '-' + str(i) + '.jpg', roiImg)
#将标识出猫脸区域的当前帧保存,方便以后标注
cv2.imwrite('save/' + str(t) + '.jpg', frame)
#未检测到结果
else:
#输出日志
print('face not detected')
#显示标识出猫脸区域的当前帧画面
cv2.imshow("capture", frame)
#检测ESC按钮,按下则退出
k = cv2.waitKey(100)
if k == 27:
break
#释放资源
cap.release()
cv2.destroyAllWindows()

实现效果:
实现效果
这位萌萌的小主叫地黄。。刚满2个月,至于名字的来源:
名字1
名字2

  • 机器学习

展开全文 >>

SQLite的RTree机制深入理解

2018-05-09

SpatiaLite是在SQLite基础上扩展的一种空间数据库,其中空间索引部分的实现使用的是SQLite的RTree机制。我们用RTree已经有一段时间了,但是今天还是遇到了一个问题,解决了之后对RTree有了更深层次的认识。

问题的现象是一份Shapefile格式的经纬度数据转换成SpatiaLite之后,数据显示不正常,在比例尺不断放大过程中,有些地方时而被填充,时而是空隙,我们分析有可能是空间索引出现了问题,导致显示时在空间索引中没有查询到,于是我们用一个功能重新计算了一遍空间索引,计算之后显示正常。

通过调试我们发现数据转换使用的空间索引维护SQL和重新计算空间索引的SQL是一致的,但两者的执行结果却是不同的,而且SQL中的数值与执行之后在数据库中查询出来的数值也不一样。

经过查找资料我们知道了SQLite的RTree,非ID字段使用的是Float类型存储的(也有整型的),这样对于经纬度坐标在小数点后第5位出现精度损失,差别也是很大的。

进一步查找资料发现,SQLite对于RTree的维护,会做下界坐标向下舍入,上界坐标向上舍入的处理,即扩大了几何的空间索引框,这样虽然会在空间查询中多查出来一些几何,但也不会有什么影响。经过对比发现数据转换中没有做坐标舍入处理,而且使用的SQLite版本是3.7.9,版本比较老。在3.8之后的SQLite库都做了舍入处理,就不会有这样的问题了。

所以解决方案有两种,一种是手动外扩空间索引框范围;另一种是更新SQLite版本。

SQLite的RTree详细理解,可以参考官方文档。

  • SpatiaLite

展开全文 >>

C#垃圾回收机制新的理解

2018-05-08

最近程序中报了一个十分诡异的异常。调试状态下不出现,直接运行EXE时100%报错。根据已往的经验肯定是垃圾回收机制的锅,因为在调试状态下变量保存的时间会比较长,直接运行回收比较频繁,只要变量被回收就会报错。

这里说明一下为什么C#变量被回收了会报错,是因为我们底层使用C++开发,上层封装成C#类,虽然上层看起来不再使用这个变量了,但是底层可能会用到,所以一旦被销毁底层就会报错。

以往出现这种问题主要有两种解决方案:1.看上层代码调用是否有问题;2.在底层加日志反馈具体的报错信息。但是看了一遍代码并没有发现有什么问题,在底层加了比较全的日志反而不报错了,对底层日志做了删减发现在某一处加了日志之后不报错,不加就报错,但是这个位置也没有看出来什么问题,都是正常的调用。

头疼了很久也没有找出来解决方案,感觉有可能是内存错乱导致的崩溃,这就比较麻烦了。所以决定完全重写上层代码,用最简模式减少上层干扰,代码重写完成后发现了一个新的问题,代码大概如下:

1
2
3
4
5
6
7
8
9
10
public void funtion1()
{
//打开数据源
DataSource ds = IWorkspaceFactory.Open();
//调用方法进行大量运算、频繁申请内存等操作
StaticClass.StaticFuction(ds);
//其它无关代码
}

就是在StaticClass.StaticFuction执行过程中,发现数据源被释放了,导致报错。
但是根据我以往的经验引用型变量在出作用域之后才会被垃圾回收,怎么提前回收了?看了半天发现之后的代码没有再用到数据源,难到是CLR分析到变量不再使用而提前释放了?
为了验证这个问题,我在StaticClass.StaticFuction之后调用了数据源的一个无关紧要的方法,大概如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public void funtion1()
{
//打开数据源
DataSource ds = IWorkspaceFactory.Open();
//调用方法进行大量运算、频繁申请内存等操作
StaticClass.StaticFuction(ds);
//调用数据源方法,验证数据源是否得以保留
ds.GetTableCount();
//其它无关代码
}

验证结果是不再报错正常运行,即上面的结论是正确的。

反观之前报错部分的上层代码,也是同样问题,修改后可以正常运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//大量循环、查询、空间分析等操作
foreach (KeyValuePair<string, List<int>> pVar in pDicUnValue)
{
//创建查询条件
IMZQueryDef pQuerydef = new mzQueryDef();
pQuerydef.QueryType = mzQueryType.mzQueryGeneral;
//查询(在底层执行查询过程中,上层回收了查询条件,导致底层再用查询条件时报错)
IMZFeatureCursor mzFeatuCur = m_sourceLayer.DatasetVector.Query(pQuerydef);
//无关紧要代码,防止查询条件被释放
string s = pQuerydef.QueryFilter;
//其它无关代码
}

上面的代码是我们比较常见的空间查询代码,一直没有出现过类似问题,看来是由于我们进行了大量的空间查询、内存申请等操作,导致CLR尽可能多的回收内存空间以保证程序正常运行,才出现这样的问题。

  • C#

展开全文 >>

使用TensorFlow进行目标识别(二)——训练和识别

2018-02-12

经过上一节数据准备之后,开始进行配置训练和目标识别

1.配置object detection模型
下载Models源码
根据object detection安装指引进行配置安装

2.下载并配置COCO数据集预训练模型
下载官方文档中提到的COCO-pretrained Faster R-CNN with Resnet-101 model模型,解压之后,将model.ckpt开头的三个文件拷贝到训练目录下。
拷贝models/research/object_detection/samples/configs/faster_rcnn_resnet101_coco.config文件到训练目录下。
修改faster_rcnn_resnet101_coco.config文件:
1)将num_classes改为1,本例中只有一个分类
2)将所有PATH_TO_BE_CONFIGURED改为本机路径,共5处

3.训练
执行脚本进行训练

1
2
3
4
python object_detection/train.py \
--logtostderr \
--pipeline_config_path=/home/paiconor/object-detection/training/faster_rcnn_resnet101_coco.config \
--train_dir=/home/paiconor/object-detection/training/trainingresult

实践证明不能用MOHI做训练。。16G内存不够霍霍的。。

训练过程中可以使用TensorBoard进行监控,指令如下:

1
tensorboard --logdir=/home/paiconor/object-detection/training/trainingresult

通过TotalLoss查看训练情况,从整体上看TotalLoss曲线是收敛的,训练效果令人满意。

4.Freeze Model模型导出
查看模型实际的效果前,我们需要把训练的过程文件导出成.pb模型文件。
运行脚本

1
2
3
4
5
python object_detection/export_inference_graph.py \
--input_type=image_tensor \
--pipeline_config_path=/home/paiconor/object-detection/training/faster_rcnn_resnet101_coco.config \
--trained_checkpoint_prefix=/home/paiconor/object-detection/training/export/model.ckpt-2107 \
--output_directory=/home/paiconor/object-detection/training/output_inference_graph.pb

导出完成后,在output_directory下,会生成frozen_inference_graph.pb、model.ckpt.data-00000-of-00001、model.ckpt.meta、model.ckpt.data文件。

5.使用训练成果进行目标检测
编写目标检测脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import cv2
import numpy as np
import tensorflow as tf
from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as vis_util
class TOD(object):
def __init__(self):
self.PATH_TO_CKPT = r'/home/paiconor/object-detection/training/output_inference_graph.pb/frozen_inference_graph.pb'
self.PATH_TO_LABELS = r'/home/paiconor/object-detection/training/hand.pbtxt'
self.NUM_CLASSES = 1
self.detection_graph = self._load_model()
self.category_index = self._load_label_map()
def _load_model(self):
detection_graph = tf.Graph()
with detection_graph.as_default():
od_graph_def = tf.GraphDef()
with tf.gfile.GFile(self.PATH_TO_CKPT, 'rb') as fid:
serialized_graph = fid.read()
od_graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(od_graph_def, name='')
return detection_graph
def _load_label_map(self):
label_map = label_map_util.load_labelmap(self.PATH_TO_LABELS)
categories = label_map_util.convert_label_map_to_categories(label_map,
max_num_classes=self.NUM_CLASSES,
use_display_name=True)
category_index = label_map_util.create_category_index(categories)
return category_index
def detect(self, image):
with self.detection_graph.as_default():
with tf.Session(graph=self.detection_graph) as sess:
# Expand dimensions since the model expects images to have shape: [1, None, None, 3]
image_np_expanded = np.expand_dims(image, axis=0)
image_tensor = self.detection_graph.get_tensor_by_name('image_tensor:0')
boxes = self.detection_graph.get_tensor_by_name('detection_boxes:0')
scores = self.detection_graph.get_tensor_by_name('detection_scores:0')
classes = self.detection_graph.get_tensor_by_name('detection_classes:0')
num_detections = self.detection_graph.get_tensor_by_name('num_detections:0')
# Actual detection.
(boxes, scores, classes, num_detections) = sess.run(
[boxes, scores, classes, num_detections],
feed_dict={image_tensor: image_np_expanded})
# Visualization of the results of a detection.
vis_util.visualize_boxes_and_labels_on_image_array(
image,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
np.squeeze(scores),
self.category_index,
use_normalized_coordinates=True,
line_thickness=8)
cv2.namedWindow("detection", cv2.WINDOW_NORMAL)
cv2.imshow("detection", image)
cv2.waitKey(0)
if __name__ == '__main__':
image = cv2.imread('image.jpeg')
detecotr = TOD()
detecotr.detect(image)

识别效果:

目前对于纯色背景识别效果不错,但是如果背景比较复杂则会出现识别错误的情况,还需要继续优化。

  • 机器学习

展开全文 >>

使用TensorFlow进行目标识别(一)——数据处理及训练前准备

2018-02-11

最近支付宝集福卡活动和抖音小年抢红包活动都是应用了手掌识别技术,所以我也想使用TensorFlow的object detection实现一个自己的手掌识别。

1.下载手掌图片
从Hand Images Databases中下载手掌图片。

这里面有两种手掌图片,一种是mobile hand images database (MOHI),即通过手机摄像头拍摄的图片,清晰度比较高,图片大小比较大;另一种是webcam hand images database (WEHI),即通过网络摄 像头拍摄的图片,清晰度一般,图片大小比较小。

因为总的图片比较多,所以这里进行了拆分,两类图片都有3个Session,每个Session有4个Group,每个Group里面有50个人的手掌图片,每个人有5张图片。

将下载后的图片解压到Images目录下。
2.数据集标注
因为TensorFlow的object detection训练使用的数据集为TFRecord格式,需要对数据集进行标注及处理。
首先使用LabelImg工具对图片中手掌的具体位置进行标注。下载Linux版LabelImg标注工具,解压、赋权限后直接运行labelImg可执行文件。

打开Images目录。

使用Create RectBox功能拉框标注手掌所在区域。

编辑标注。

如果对框选区域不满意还可以进行编辑。

将标注结果xml保存到Images/xmls目录下,注意保存路径中不能包含中文,否则保存不成功。

3.转换成TFRecord格式
根据Datitran提供的方法进行格式转换。

首先安装pandas模块

1
pip install pandas

然后修改xml_to_csv.py代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import os
import glob
import pandas as pd
import xml.etree.ElementTree as ET
def xml_to_csv():
xml_list = []
for xml_file in glob.glob('*.xml'):
tree = ET.parse(xml_file)
root = tree.getroot()
for member in root.findall('object'):
value = (root.find('filename').text,
int(root.find('size')[0].text),
int(root.find('size')[1].text),
member[0].text,
int(member[4][0].text),
int(member[4][1].text),
int(member[4][2].text),
int(member[4][3].text)
)
xml_list.append(value)
column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']
xml_df = pd.DataFrame(xml_list, columns=column_name)
return xml_df
def main():
xml_df = xml_to_csv()
xml_df.to_csv('hand.csv', index=None)
print('Successfully converted xml to csv.')
main()

在Images/xmls目录下执行该python脚本,即可生成hand.csv。

接下来的脚本需要tensorflow环境和object_detection_api,这些环境配置将在下一节介绍。
调用generate_tfrecord.py(也可以修改代码),注意要指定–csv_input与–output_path这两个参数。执行下面命令即可生成TFRecord文件:

1
python generate_tfrecord.py --csv_input=Images/xmls/hand.csv --output_path=hand.record

注意一下这个脚本里有两个写死的地方,一个是90行的那个path,即图片所在目录,代码里写死会在当前目录下images文件夹中查找,如果图片目录有变化这里要进行修改;另一个是class_text_to_int方法,这里会把目标类型文本转成数字,本例中需要将raccon改为hand,如果是多目标需要在里面加分支。

再仿照models/research/object_detection/data/pet_label_map.pbtxt创建hand.pbtxt。

1
2
3
4
item {
id: 1
name: 'hand'
}

准备的成果是hand.pbtxt和hand.record,再按照上述方法准备一套用于验证的TFRecord。

  • 机器学习

展开全文 >>

使用QGIS向PostGIS中导入Shapefile数据

2018-02-01

1.打开QGIS,使用菜单中的添加图层功能,添加PostGIS图层
1
2.创建PostGIS连接
1
3.测试连接是否正常
1
4.使用数据库管理功能向PostGIS数据库中导入Shapefile数据
1
5.找到刚刚添加的PostGIS连接
1
6.使用导入功能
1
7.导入Shapefile数据
1
8.导入成功
1
9.刷新PostGIS连接,查看导入数据
1
10.使用pgAdmin查看导入数据
1
11.再次使用添加PostGIS图层功能
1
12.添加完成
1
13.采编数据
1
14.录入属性
1

  • GIS
  • PostGIS

展开全文 >>

Ubuntu下安装PostgreSQL和PostGIS

2018-01-31

1.安装PostgreSQL

使用如下命令,会自动安装最新版,这里为9.5

1
sudo apt-get install postgresql

1
安装完成后,默认会:
(1)创建名为”postgres”的Linux用户
(2)创建名为”postgres”、不带密码的默认数据库账号作为数据库管理员
(3)创建名为”postgres”的表

安装完成后的一些默认信息如下:

1
2
3
4
5
config /etc/postgresql/9.5/main
data /var/lib/postgresql/9.5/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5432

2.修改数据库默认帐号的密码

安装完后会有PostgreSQL的客户端psql,通过 sudo -u postgres psql 进入
2
执行密码更新语句,注意语句后边的分号,不带分号执行不成功

1
postgres=# alter user postgres with password '新密码';

3
输入“\q”命令退出psql客户端
4

3.配置数据库以允许远程连接访问

安装完成后,默认只能本地才能连接数据库,其他机子访问不了,需要进行配置。

1)修改监听地址

1
sudo gedit /etc/postgresql/9.5/main/postgresql.conf

将 #listen_addresses = ‘localhost’ 的注释去掉并改为 listen_addresses = ‘*’

2)修改可访问用户的IP段

1
sudo gedit /etc/postgresql/9.5/main/pg_hba.conf

在文件末尾添加: host all all 0.0.0.0 0.0.0.0 md5 ,表示运行任何IP连接

3)重启数据库

1
sudo /etc/init.d/postgresql restart

4.安装图形管理界面

1
sudo apt-get install pgadmin3

安装完成后启动程序
5
添加服务器
6
7

5.安装PostGIS

首先使用如下命令添加UbuntuGIS的PPA用于安装PostGIS扩展

1
2
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update

然后使用如下命令安装PostGIS

1
sudo apt-get install postgis

6.数据库扩展PostGIS

执行SQL语句

1
CREATE EXTENSION PostGIS

成功后刷新,数据表中会出现spatial_ref_sys,说明扩展成功
8

下一篇将介绍如何使用QGIS向PostGIS中导入Shapefile数据,以及加载、编辑PostGIS数据。

  • GIS
  • PostGIS

展开全文 >>

解决python 3.6.4版本在windows系统上运行报错api-ms-win-crt-runtime-l1-1-0.dll丢失的问题

2018-01-17

前一段时间使用C#调用Python脚本的方案解决某些业务问题,所以在程序内部带了一个免安装的python环境。
这套方案虽然在一段时间内风平浪静,但是这两天问题集中爆发,主要有两个问题:
1)内置的python环境是64位的,无法在32位系统上运行
2)在某些64位机器上也无法运行,报错“计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll”
error

针对第二个问题,在网上找到很多解决方案,都是说什么系统更新,安装运行时之类的,但是我们的用法比较特殊,不可能让每个用户去做系统更新,所有准备了两条路:
1)降底python版本,据说3.4.*系列没有这个问题
2)在Python文件夹内放置依赖库

苦找一下午之后终于找到这篇博客,照葫芦画瓢竟然成功了,感激涕零。。

处理方案:
1.拷贝依赖库,拷贝位置规则如下:
a、64位操作系统,32位程序,选择syswow64下dll
b、64位操作系统,64位程序,选择system32下dll
c、32位操作系统,32位程序,选择system32下dll

2.拷贝内容:拷贝所有api-ms开头的dll ,以及msvcp140.dll,vcruntime140.dll,ucrtbase.dll到程序目录。我这里的python环境内置了vcruntime140.dll,而且拷过去之后发现与python内置的完全一致。
error

至此,成功解决api-runtime确实错误,无需安装vc2015 runtime ,也就无需升级sp1。感谢黯然销魂掌2015!!!

  • python

展开全文 >>

« Prev1…3456Next »
© 2020 ConorPai
版权所有,备案编号:京ICP备17057084号
本站总访问量57546次 | 本站访客数52422人
  • 所有文章
  • 更多内容
  • 关于我

tag:

  • python
  • GIS
  • CentOS
  • PostGIS
  • PostGISMVT
  • Vector Tiles
  • PostgreSQL
  • C#
  • 个人网站搭建
  • DevOps
  • Jenkins
  • 无人机
  • C++
  • Docker
  • Mapnik
  • TileStrata
  • Node.js
  • NPM
  • 机器学习
  • PhotoScan
  • OpenStreetMap
  • ST_Transform
  • Topology
  • Simplify
  • eCognition
  • SpatiaLite
  • 微服务
  • Oracle
  • 直播
  • DataCache
  • VSCode

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 离线环境下Docker环境部署解决方案

    2019-08-20

    #Docker

  • 使用Docker版本Jenkins持续集成

    2019-07-30

    #DevOps#Jenkins

  • CentOS挂载Windows共享文件夹

    2019-06-28

    #CentOS

  • 关于面积计算,我想说点什么

    2019-06-12

    #GIS

  • 试用DBLink进行PostgreSQL跨库查询

    2019-06-06

    #PostgreSQL

  • 使用Docker部署PostgreSQL数据库、PostGIS插件

    2019-05-30

    #PostGIS#PostgreSQL#Docker

  • 试用TileStrata-underzoom插件

    2019-05-29

    #TileStrata

  • 试用VS Code Remote

    2019-05-15

    #VSCode

  • 试用TileStrata-blend插件

    2019-04-09

    #TileStrata

  • 使用PostGIS进行拓扑抽稀

    2019-04-03

    #PostGIS#Topology#Simplify

  • 使用VSCode远程调试服务器部署的Node.js服务

    2019-03-13

    #Node.js#VSCode

  • CentOS下使用PostGIS的ST_AsMVT函数

    2019-01-22

    #CentOS#PostGIS#PostGISMVT#Vector Tiles

  • NPM开启两步验证

    2019-01-09

    #NPM

  • CentOS下安装字体文件

    2019-01-07

    #CentOS

  • 升级CentOS系统下PostgreSQL10的PostGIS插件大版本

    2019-01-04

    #CentOS#PostGIS

  • 记一次PostGIS版本更新导致的问题

    2019-01-03

    #CentOS#PostGIS

  • CentOS系统下变更Postgresqsl数据存储位置

    2018-12-29

    #CentOS#PostgreSQL

  • 解决CentOS服务器使用Yum连接源失败的问题

    2018-12-14

    #CentOS

  • 使用PostGIS函数进行带参数坐标变换

    2018-12-10

    #PostGIS#ST_Transform

  • 试用TileStrata-PostGISMVT矢量瓦片插件

    2018-11-29

    #GIS#PostGISMVT#Vector Tiles#TileStrata

  • 试用Node.js连接Oracle数据库

    2018-11-26

    #Node.js#Oracle

  • 试用携程Apollo配置中心

    2018-11-08

    #微服务

  • 试水进程转后台运行

    2018-10-08

    #CentOS

  • 记一次500万数据量出图效率优化的心路历程

    2018-09-30

    #PostGIS#Mapnik

  • 在CentOS7上部署node-mapnik,并使用PostGIS数据源发布瓦片服务

    2018-09-29

    #CentOS#PostGIS#Mapnik

  • 试水直播技术

    2018-09-17

    #直播

  • TileStrata缓存深入研究

    2018-09-14

    #GIS#Mapnik#TileStrata#DataCache

  • 基于TileStrata发布矢量瓦片服务

    2018-09-10

    #GIS#Vector Tiles#Mapnik#TileStrata

  • 使用eCognition的面向对象多尺度分割技术进行影像树冠提取

    2018-08-30

    #无人机#eCognition

  • PhotoScan手动对齐照片

    2018-08-27

    #无人机#PhotoScan

  • 试水NPM模块发布流程

    2018-08-16

    #Node.js#NPM

  • node-mapnik集群负载均衡配置

    2018-07-25

    #GIS#Mapnik

  • 使用node-mapnik和OpenStreetMap Carto发布在线瓦片地图服务

    2018-07-10

    #GIS#Mapnik#OpenStreetMap

  • 简单试用自定义Mapnik数据源插件

    2018-06-29

    #GIS#Mapnik

  • 使用Mapnik发布简单的地图服务

    2018-06-25

    #GIS#Mapnik

  • 阿里云CDN加速配置

    2018-06-12

    #个人网站搭建

  • 试水C#成果反编译(二)

    2018-06-08

    #C#

  • 试水C#成果反编译(一)

    2018-06-07

    #C#

  • 利用无人机拼接正射影像图(二)

    2018-06-04

    #无人机

  • 利用无人机拼接正射影像图(一)

    2018-06-03

    #无人机

  • 使用GDI+绘制Image拼接处出现白边的问题

    2018-05-30

    #C++

  • 解决pip3的cannot import name main问题

    2018-05-28

    #python

  • 使用OpenCV和TensorFlow实现猫主子识别(-)——提取猫脸图片

    2018-05-10

    #机器学习

  • SQLite的RTree机制深入理解

    2018-05-09

    #SpatiaLite

  • C#垃圾回收机制新的理解

    2018-05-08

    #C#

  • 使用TensorFlow进行目标识别(二)——训练和识别

    2018-02-12

    #机器学习

  • 使用TensorFlow进行目标识别(一)——数据处理及训练前准备

    2018-02-11

    #机器学习

  • 使用QGIS向PostGIS中导入Shapefile数据

    2018-02-01

    #GIS#PostGIS

  • Ubuntu下安装PostgreSQL和PostGIS

    2018-01-31

    #GIS#PostGIS

  • 解决python 3.6.4版本在windows系统上运行报错api-ms-win-crt-runtime-l1-1-0.dll丢失的问题

    2018-01-17

    #python

  • 试用百度AI

    2017-12-08

    #机器学习

  • C#实现带证书http请求

    2017-12-04

    #C#

  • 使用C#获取系统软硬件信息

    2017-12-01

    #C#

  • 解决WinForm自定义控件刷新时闪烁问题

    2017-11-14

    #C#

  • 使用Hexo搭建个人博客的详细教程

    2017-10-31

    #个人网站搭建

  • 迷路小分队-队员墙
  • 迷路小分队-队员端
  • 博客园
  • 个人相册
啥呀?谁呀?

迷路是特色,迷路不迷糊
梦想是在家抱着喵主写代码