最后编辑于2022-04
一、背景
目前有太多的商标logo需要识别,能满足不同的需求:
1、识别出我们不认识的logo;
2、也能识别大量图片中不同logo的数据信息;
3、同时在我们设计logo的时候,也可以通过调用logo识别接口,查询是否有相似度较高的logo。
识别出的数据对数据分析,画像等十分有帮助。
二、技术方案
1、使用python通过多线程方式爬取车标logo图片以及对应logo的车名;
2、然后调用logo识别接口,根据返回结果;
3、正确返回的,按照probability分数从高到底排列;
4、选出最高分的结果与爬取的logo车名进行比对;完全一致的存入success.txt中;
5、识别失败,结果为空以及与logo车名不一样的,存入fail.txt中
三、具体实现的步骤
1、申请账号,以及创建应用,属于基础操作,这里不过多说明,不再占用篇幅;
2、通过应用生成access_token同样比较基础,我这里直接使用生成好的access_token;
3、直接上代码,爬取车标,生成的结果为:图片url地址-车标名称
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# Copyright (c) 2021 Baidu.com, Inc. All Rights Reserved
#
"""
Date: 2021/11/26 下午6:06
"""
import requests
import threading
import urllib.parse
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor
lock = threading.Lock()
class Spider(object):
def __init__(self, page_url, thread_count, timeout, result):
self.url = page_url
self.thread_count = thread_count
self.timeout = timeout
self.result = result
self.image = set()
self.urls = set()
self.result_file = None
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/95.0.4638.69 Safari/537.36"
}
self.init_urls()
def init_urls(self):
self.result_file = open(self.result, "w")
self.get_all_urls()
def get_all_urls(self):
html = requests.get(self.url, headers=self.headers, timeout=self.timeout)
soup = BeautifulSoup(html.text, "lxml")
urls = soup.select("#menu > ul > li > a")
for url in urls:
self.urls.add(self.get_url(self.url, url.get("href")))
def get_url(self, absolute_url, relative_url):
scheme = urllib.parse.urlparse(absolute_url).scheme
return "{0}:{1}".format(scheme, relative_url)
def write_file(self, image):
lock.acquire()
self.result_file.write(f'{image}\r\n')
lock.release()
def run(self):
with ThreadPoolExecutor(max_workers=self.thread_count) as pool:
pool_iter = pool.map(self.crawl, list(self.urls))
# 循环只是为了确认所有线程执行完成
for _ in pool_iter:
pass
def crawl(self, url):
html = requests.get(url, headers=self.headers, timeout=self.timeout)
soup = BeautifulSoup(html.text.encode("iso-8859-1").decode("gbk"), "lxml")
soup_imgs = soup.select("#pcauto > div.lyA > div > div.tb > ul > li > div.dPic > i.iPic > a > img")
soup_text = soup.select("#pcauto > div.lyA > div > div.tb > ul > li > div.dTxt > i.iTit > a")
for i in range(len(soup_imgs)):
res = f'{self.get_url(url, soup_imgs[i].get("src"))}-{soup_text[i].text}'
self.rm_duplicate_img(res)
def rm_duplicate_img(self, img_url):
if img_url and img_url not in self.image:
self.image.add(img_url)
self.write_file(img_url)
if __name__ == '__main__':
# 车标网站
url = "https://www.pcauto.com.cn/zt/chebiao/"
# 进程数
thread_count = 4
# 超时时间
timeout = 2
# 结果文件
result = "./result.txt"
Spider(url, thread_count, timeout, result).run()
4、结果展示
5、根据结果,调用logo识别接口,将完全正确结果存入success.txt中,错误的存入fail.txt中
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# Copyright (c) 2021 Baidu.com, Inc. All Rights Reserved
#
"""
Date: 2021/11/29 下午9:16
"""
import requests
import time
'''
logo商标识别
'''
class LogoRecognition(object):
"""
logo 识别
"""
def __init__(self, url, access_token, success, fail, pic_file):
self.request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo"
self.params = {"url": ""}
self.access_token = '24.4cd7e9972b035d625788e4eaa4576e9d.2592000.1640792051.282335-24850166'
self.headers = {'content-type': 'application/x-www-form-urlencoded'}
self.pic_file = pic_file
self.pics = []
self.success = open(success, "w")
self.fail = open(fail, "w")
def run(self):
self.read_pic()
request_url = self.request_url + "?access_token=" + self.access_token
for item in self.pics:
self.params["url"] = item[0]
time.sleep(0.3)
response = requests.post(request_url, data=self.params, headers=self.headers)
if response:
print(response.json())
if response.json().get("result"):
name = sorted(response.json()['result'], key=lambda v: -v["probability"])[0]["name"]
if name == item[1]:
self.success.write(f"{item[0]}-{item[1]}-{name}\r\n")
else:
self.fail.write(f"{item[0]}-{item[1]}-{name}\r\n")
else:
self.fail.write(f"{item[0]}-{item[1]}-{response.json()}\r\n")
self.success.close()
self.fail.close()
def read_pic(self):
with open(self.pic_file, "r") as f:
for line in f.readlines():
self.pics.append(tuple(line.strip().split("-")))
if __name__ == '__main__':
lr = LogoRecognition(
url="https://aip.baidubce.com/rest/2.0/image-classify/v2/logo",
access_token='24.4cd7e9972b035d625788e4eaa4576e9d.2592000.1640792051.282335-24850166',
success="./success.txt",
fail="./fail.txt",
pic_file="./result.txt"
)
lr.run()
四、实现的效果
1、总共车标共有123个
2、完全成功的,既车标名称与识别的名称完全一致,个数为82
3、识别失败,或者名称有所差别,个数为41个。
4、其中失败中,车标文字略有差异,但是识别成功,如车标名称为:阿尔法罗密欧,但是别结果为:阿尔法·罗密欧。个数为:21个
5、统计结果
统计 | 完全正确(名称完全一致) | 基本正确(名称略微不同,但是同一车牌) | 识别错误(或调用失败) |
个数 | 82 | 21 | 20 |
正确率 | 66.7% | 17% | 16.3% |
五、总结
1、总共车标共有123个,总的识别正确率为83.7%;
2、存在调用失败的情况,这些情况希望百度logo识别团队查看原因;
3、代码可以直接运行,希望其它百度开发者批评指正,大家可以运行看下结果
请登录后评论
TOP
切换版块
https://embed.plnkr.co/plunk/9AvFo7wc5jRtlUJY/
https://embed.plnkr.co/plunk/HyO6QzktYDyuAIvG/
https://embed.plnkr.co/plunk/RoI9AOYo1FJtXeTY/
https://embed.plnkr.co/plunk/vLZUB8crToxIbk1J/
https://embed.plnkr.co/plunk/0eP1GVcRqBiJ4hNZ/
https://embed.plnkr.co/plunk/lVXoPav6qr64HSKi/
https://embed.plnkr.co/plunk/S6rwhz4t4AeA6FQq/
https://embed.plnkr.co/plunk/mIasXtCuKoGn5uXt/
https://embed.plnkr.co/plunk/P0c0KEHMqNBAs1jd/
https://embed.plnkr.co/plunk/ZlICgUJ6OEZbn6Qh/
https://embed.plnkr.co/plunk/ddd7hQdVN2oyypJJ/
https://embed.plnkr.co/plunk/VcAac7cqHqHJjVHv/
https://embed.plnkr.co/plunk/9k5IEnunmEHFZ9BA/
https://embed.plnkr.co/plunk/oxyylVwwriHDdKYz/
https://embed.plnkr.co/plunk/nXqqz6wCm9AUb1hc/
https://embed.plnkr.co/plunk/2Arq28VbjJUc7BWk/
https://embed.plnkr.co/plunk/umgLQ4YGTccmoBUF/
https://embed.plnkr.co/plunk/vdtSC9Ik8olzLenw/
https://embed.plnkr.co/plunk/b3LlpSqro7MblCTp/
https://embed.plnkr.co/plunk/NXNHDTPYdxWUqf2l/
https://embed.plnkr.co/plunk/3Vjw1KgyZYDlnwce/
https://embed.plnkr.co/plunk/KEcAmq5MXQxMedKR/
https://embed.plnkr.co/plunk/LplklED5PoNIKkkX/
https://embed.plnkr.co/plunk/ABlTinNL9ZO3OOJM/
https://embed.plnkr.co/plunk/JCIHPYvHImjLpwj8/
https://embed.plnkr.co/plunk/mfwsrFbvdTiBxPVX/
https://embed.plnkr.co/plunk/2GFx0SR7FuDsufXW/
https://embed.plnkr.co/plunk/B1GGbpJS9IwQfFBi/
https://embed.plnkr.co/plunk/DrgKMMmEbnblZr0t/
https://embed.plnkr.co/plunk/Hbo4dNfTVRmu1ju0/
https://embed.plnkr.co/plunk/cxYQSx4NRqKFpmfC/
https://embed.plnkr.co/plunk/8fuYzW0fmlYddCDc/
https://embed.plnkr.co/plunk/FXVuN2xJgDmTLAOL/
https://embed.plnkr.co/plunk/9rbj6q6Z88tKMAky/
https://embed.plnkr.co/plunk/C7C1E0e7aQpqIFeQ/
https://embed.plnkr.co/plunk/7n0Hia6nGqQ9w3yD/
https://embed.plnkr.co/plunk/iKJaS2uW3IOtsOGB/
https://embed.plnkr.co/plunk/IyPn8vpJRkUFEKwg/
https://embed.plnkr.co/plunk/WFXebsxWzEbUAYZc/
https://embed.plnkr.co/plunk/V5DDkHEASA27PYMo/
https://embed.plnkr.co/plunk/6VwW69oALuMtPbKP/
https://embed.plnkr.co/plunk/qb8sk0X4mdje0ruj/
https://embed.plnkr.co/plunk/YlebUe4gq7sHsGCx/
https://embed.plnkr.co/plunk/2gCRBVzToWGVOL9w/
https://embed.plnkr.co/plunk/dlQNBPLHfRMIUwd8/
https://embed.plnkr.co/plunk/OYFkttXn0EeHPEqQ/
https://embed.plnkr.co/plunk/uyFh3Og89kEnw7gB/
https://embed.plnkr.co/plunk/4YWDLhI8patZl5Dj/
https://embed.plnkr.co/plunk/NGO7j2SbqJ2pkSfv/
https://embed.plnkr.co/plunk/S2ydID5ozIxKmO3r/
https://embed.plnkr.co/plunk/bp7ncn4Hq1MxNSLH/
https://embed.plnkr.co/plunk/HaXYpYM25YfdZSvT/
https://embed.plnkr.co/plunk/BProIWPpaJ7LQPmK/
https://embed.plnkr.co/plunk/BIxjAhTO8OtdYC1V/
https://embed.plnkr.co/plunk/M6TYeO2QuBIS1XRp/
https://embed.plnkr.co/plunk/UHo2pfuaxeqTfShl/
https://embed.plnkr.co/plunk/wOHvm2nMFaH2ETNj/
https://embed.plnkr.co/plunk/K1rhLjpQIL0wNrKJ/
https://embed.plnkr.co/plunk/pDBWu6UVlbXU87vb/
https://embed.plnkr.co/plunk/9pFRYuTqTkItUeui/
https://embed.plnkr.co/plunk/p0eNTTLt1gKIIQGl/
https://embed.plnkr.co/plunk/ncPnidHHS1GeQDkh/
https://embed.plnkr.co/plunk/dNJHg0Hzl88lS3Ex/
https://embed.plnkr.co/plunk/55TRjdGjEKRA3Kx5/
https://embed.plnkr.co/plunk/km0LG3QrZtGSOz3U/
https://embed.plnkr.co/plunk/bcTKgc0JTYwNs01N/
https://embed.plnkr.co/plunk/AT7gsZwn7GkNJLY9/
https://embed.plnkr.co/plunk/mkTtChjzSwsiNn2G/
https://embed.plnkr.co/plunk/TVIFvc6KBCRRvJtl/
https://embed.plnkr.co/plunk/k9JrTQILg6sYekAb/
https://embed.plnkr.co/plunk/E2RwjvO5ScRGRZDQ/
https://embed.plnkr.co/plunk/lpnh4MkJn8pUIcYk/
https://embed.plnkr.co/plunk/8joEEsKuS9DjL0VT/
https://embed.plnkr.co/plunk/ihhgMpsA0nqbIuye/
https://embed.plnkr.co/plunk/rYaVYJbxNKIT9geQ/
https://embed.plnkr.co/plunk/N2zsqnzzSOXbCjAh/
https://embed.plnkr.co/plunk/HzVOzh89WmO83P6D/
https://embed.plnkr.co/plunk/nTxpFXOk1ZbdEKk0/
https://embed.plnkr.co/plunk/xt1xuovr3hPx7sAG/
https://embed.plnkr.co/plunk/LzQoeSywmPO8txsa/
https://embed.plnkr.co/plunk/Sw9Ad9ADkqSfNkAr/
https://embed.plnkr.co/plunk/9ze8AB3ug3orewQ5/
https://embed.plnkr.co/plunk/9FF55dpeyHCtIhjE/
https://embed.plnkr.co/plunk/82P0fa2dFWEFd80e/
https://embed.plnkr.co/plunk/npUstIqZ69TBj0Wo/
https://embed.plnkr.co/plunk/sYqxJiWzEQaCZyBj/
https://embed.plnkr.co/plunk/L7fSHL498kmBUtLy/
https://embed.plnkr.co/plunk/uHXiPZ7kdFjHTOOq/
https://embed.plnkr.co/plunk/QZohZYyZSGm7b5gq/
https://embed.plnkr.co/plunk/yiRnwVO0KMrp5yOF/
https://embed.plnkr.co/plunk/Ip1yfyC6CtrXl89s/
https://embed.plnkr.co/plunk/c4nt7sLeExZ8lrCo/
https://embed.plnkr.co/plunk/nFZuYs8UcBSSoWpK/
https://embed.plnkr.co/plunk/ZzwRyU3ZdJpvo6WV/
https://embed.plnkr.co/plunk/DyuDo35hW0bcufPW/
https://embed.plnkr.co/plunk/vrx32dXNwmgNFbnf/
https://embed.plnkr.co/plunk/wdJdx5FqpDUvlqPq/
https://embed.plnkr.co/plunk/LpgTssvjYIEVOBue/
https://embed.plnkr.co/plunk/h3mVSCMbKQhJCC2t/
https://embed.plnkr.co/plunk/sYj2pqNUAmjAga00/
https://embed.plnkr.co/plunk/b4ibN4vaGQqguFLL/
https://embed.plnkr.co/plunk/tYscoPHg2SyEJmWU/
https://embed.plnkr.co/plunk/hczfiwVW8W1BYCiO/
https://embed.plnkr.co/plunk/Cw9Aj3Nul8w7kHGS/
https://embed.plnkr.co/plunk/JCZGHDYfP3qbspN0/
https://embed.plnkr.co/plunk/I6ghX1H8k9sDmTjH/
https://embed.plnkr.co/plunk/Fj99CWwoEgYwui01/
https://embed.plnkr.co/plunk/dxcRjfBkyQpcvlGc/
https://embed.plnkr.co/plunk/fTLsg6vOc5GNFy8L/
https://embed.plnkr.co/plunk/TnB58L8wLQpcqO80/
https://embed.plnkr.co/plunk/J7LlfCK3wcdkR74V/
https://embed.plnkr.co/plunk/nztRcSBOCOEsyD3c/
https://embed.plnkr.co/plunk/HCWxv5VWFgn1uuJS/
https://embed.plnkr.co/plunk/F5oTojdd5JCvT4aK/
https://embed.plnkr.co/plunk/RrJ175vzYtieUjEJ/
https://embed.plnkr.co/plunk/nQDVFi0pfgxv5UXv/
https://embed.plnkr.co/plunk/cjMAqKYkmnli4RNK/
https://embed.plnkr.co/plunk/hs3gbHz7FZI2xyGT/
https://embed.plnkr.co/plunk/iWAkPpWiyZ9QuLjl/
https://embed.plnkr.co/plunk/3VN3BA5Tp1NdWxez/
https://embed.plnkr.co/plunk/KoSXl3zd4IxH8SKI/
https://embed.plnkr.co/plunk/tUQcKpVQqDMIsEuY/
https://embed.plnkr.co/plunk/hwlW8PHYDQqflkeE/
https://embed.plnkr.co/plunk/d6OJ5DVNpdPdA6S7/
https://embed.plnkr.co/plunk/nPNE4ulx4P9MTORf/
https://embed.plnkr.co/plunk/7AiPu2I3AGCF9NZU/
https://embed.plnkr.co/plunk/lL2gZorpzpiXB3Xd/
https://embed.plnkr.co/plunk/lG5szPaDTInS6QLx/
https://embed.plnkr.co/plunk/Y4QUX2esRdRdnO5o/
https://embed.plnkr.co/plunk/r1zGf4zmzQlpFRJv/
https://embed.plnkr.co/plunk/qwMf9jtCMCahvhUC/
https://embed.plnkr.co/plunk/VA6yZYhVhmoFPuIJ/
https://embed.plnkr.co/plunk/YA0RFBUHASflxogJ/
https://embed.plnkr.co/plunk/AfRIGp3t0K2S4ImC/
https://embed.plnkr.co/plunk/WK7aKb7ffeQ3yyLZ/
https://embed.plnkr.co/plunk/rw4dW27qPZXL2TQH/
https://embed.plnkr.co/plunk/maNb8SSbbn8RlcUp/
https://embed.plnkr.co/plunk/iV7u8vtzUAyt5M4n/
https://embed.plnkr.co/plunk/qtVpY7qRKLIkn2Y8/
https://embed.plnkr.co/plunk/mICSuJOegNZ6dRZs/
https://embed.plnkr.co/plunk/wQ9IVBhHt6vjPcBp/
https://embed.plnkr.co/plunk/92xcptoj3fuByqPI/
https://embed.plnkr.co/plunk/3ls15tFsMkzxwiKb/
https://embed.plnkr.co/plunk/6Rce82fYH9CgFnos/
https://embed.plnkr.co/plunk/UQb9lURZs83pYQRF/
https://embed.plnkr.co/plunk/SMSkhMxIUVq1rmbL/
https://embed.plnkr.co/plunk/DIdJpxEGfHBfsPU1/
https://embed.plnkr.co/plunk/VXEiWGgWINclit6b/
https://embed.plnkr.co/plunk/EHdFz1S2F4UF8zPw/
https://embed.plnkr.co/plunk/fjZRlwa1DgifPtsa/
https://embed.plnkr.co/plunk/fWJ2FYDZzKdCMoKH/
https://embed.plnkr.co/plunk/gAFOjsvYuhQSFkux/
https://embed.plnkr.co/plunk/pYh9Jpb74iieKPjo/
https://embed.plnkr.co/plunk/8bsmndKHKxlGBW9H/
https://embed.plnkr.co/plunk/D1nejIdpizrGONXC/
https://embed.plnkr.co/plunk/3WIb4ln7gAHKxk1d/
https://embed.plnkr.co/plunk/9ozu9lh7uvU39pxF/
https://embed.plnkr.co/plunk/HjEYx43I3zM9bfSZ/
https://embed.plnkr.co/plunk/aZNZC0Q5x8y9Ba7y/
https://embed.plnkr.co/plunk/BLY27OBAaezH1liL/
https://embed.plnkr.co/plunk/mhEUP4KUq1uoCG1e/
https://embed.plnkr.co/plunk/BUoTMCwAAZK7stU6/
https://embed.plnkr.co/plunk/ebm7pqsQ2ZfxruF1/
https://embed.plnkr.co/plunk/WrlCFXa2MOcHe4da/
https://embed.plnkr.co/plunk/0JeewtfVrQWUljg9/
https://embed.plnkr.co/plunk/T9pPHYgsgEkyjzEe/
https://embed.plnkr.co/plunk/6hbspUzCmmWYoh4q/
https://embed.plnkr.co/plunk/u7zJRA4NkGO762En/
https://embed.plnkr.co/plunk/3fdXf6PtxRV0FOzc/
https://embed.plnkr.co/plunk/C0ZaBBQhEHdcpHKJ/
https://embed.plnkr.co/plunk/8SxydJeF7HIdC7jb/
https://embed.plnkr.co/plunk/pDZGWObi588zyoh8/
https://embed.plnkr.co/plunk/6DBhA0G3v5tfRLzk/
https://embed.plnkr.co/plunk/QZAsc0NnpG1bBldz/
https://embed.plnkr.co/plunk/z4vG023t74pH1pk2/
https://embed.plnkr.co/plunk/yPZIXTqO91hHIcoq/
https://embed.plnkr.co/plunk/7nwVB9f7K8scGkA5/
https://embed.plnkr.co/plunk/YfHpPgmTjlNUyerL/
https://embed.plnkr.co/plunk/EWLb5bH5O3hturso/
https://embed.plnkr.co/plunk/MTVRmep0wJfOi738/
https://embed.plnkr.co/plunk/AsVIMOBOxpJGb1FB/
https://embed.plnkr.co/plunk/EFP0r5XojcRUBeWm/
https://embed.plnkr.co/plunk/xccapOo2IiUPWWnQ/
https://embed.plnkr.co/plunk/jEOapzN4xO6UMEZX/
https://embed.plnkr.co/plunk/LSxc8zS9y89n5MFh/
https://embed.plnkr.co/plunk/iiIIkXL7HdnxtRiF/
https://embed.plnkr.co/plunk/tDhmFb5AeX9zaFox/
https://embed.plnkr.co/plunk/T6ZsgTt0Teqd6dzG/
https://embed.plnkr.co/plunk/Rgikqr5HTX7kZkFC/
https://embed.plnkr.co/plunk/Bt21UvuhJV3iiGdq/
https://embed.plnkr.co/plunk/IQ2FEvy4WquBX4u7/
https://embed.plnkr.co/plunk/TADShku4EcBXARAj/
https://embed.plnkr.co/plunk/U6ZtZDl6qo9loAos/
https://embed.plnkr.co/plunk/VvAYN7I05PsW1WAx/
https://embed.plnkr.co/plunk/rj5qBD7qDDeiRewn/
https://embed.plnkr.co/plunk/XNOdpsZe46EsluLL/
https://embed.plnkr.co/plunk/Tuu4vADrHcEW9Lb8/
https://embed.plnkr.co/plunk/JvKg8hAj8B4EtjHy/
https://embed.plnkr.co/plunk/E52AzBI5kNmSaUMT/
https://embed.plnkr.co/plunk/3CYbEJ4hnQWzNLy1/
https://embed.plnkr.co/plunk/uXyGjBjnN6N0LILF/
https://embed.plnkr.co/plunk/caZnLVxpi6LPjVlH/
https://embed.plnkr.co/plunk/4cjwDv5OVk6orqWV/
https://embed.plnkr.co/plunk/2fhNWMoq2UuyOFOP/
https://embed.plnkr.co/plunk/gQ9XxwGjO7SKwVOW/
https://embed.plnkr.co/plunk/TR4FiFrVyviHoeY9/
https://embed.plnkr.co/plunk/mEEc6UIIYP2pXEo1/
https://embed.plnkr.co/plunk/CLElHgPGq7sgPZXQ/
https://embed.plnkr.co/plunk/4H0BB6wrO2elMUbS/
https://embed.plnkr.co/plunk/a3ZHLNpzqJLpySww/
https://embed.plnkr.co/plunk/IQUM5TZwsRcq8SNI/
https://embed.plnkr.co/plunk/eBNzsq0e90AlmxZG/
https://embed.plnkr.co/plunk/oWVDfsHl7MAJtOin/
https://embed.plnkr.co/plunk/1azRYOuEIEGsrwzv/
https://embed.plnkr.co/plunk/iy4ZM8U61IIH0utV/
https://embed.plnkr.co/plunk/gOvsi4yCIjg027tV/
https://embed.plnkr.co/plunk/IRDsyjBDua6Ry1Ao/
https://embed.plnkr.co/plunk/IYhiBXF9aETNVTB8/
https://embed.plnkr.co/plunk/8YQcyh4r0ykcIT4K/
https://embed.plnkr.co/plunk/DMoukz95SyL72gCb/
https://embed.plnkr.co/plunk/jna9KOc6dozY65bH/
https://embed.plnkr.co/plunk/PIm4oanzsyixw3J8/
https://embed.plnkr.co/plunk/GHQCz4AFaFRuan3E/
https://embed.plnkr.co/plunk/zVWB3p09NiKdXtkV/
https://embed.plnkr.co/plunk/xxAe0Q90lnaS30JE/
https://embed.plnkr.co/plunk/Yk3S9DH2XOAtyd3x/
https://embed.plnkr.co/plunk/Z0Osm8bYed3axeyI/
https://embed.plnkr.co/plunk/BWNQb0I53rHUpHoh/
https://embed.plnkr.co/plunk/pXRbWih6gN9byfdl/
https://embed.plnkr.co/plunk/QEEBgfrjaM7K6bFd/
https://embed.plnkr.co/plunk/JWJIdSzTyk7NIOCJ/
https://embed.plnkr.co/plunk/VP0b1MxGAPmdZ0bR/
https://embed.plnkr.co/plunk/ID1I7bIq0xJqicBu/
https://embed.plnkr.co/plunk/2d2jZQgzG3jKLEDF/
https://embed.plnkr.co/plunk/bqmDi6eZ9GNzTCv3/
https://embed.plnkr.co/plunk/gHCUglI3tOWqJgoj/
https://embed.plnkr.co/plunk/XvB75bgiP2iTLWsb/
https://embed.plnkr.co/plunk/OvZ7qeqgEoXqMJdA/
https://embed.plnkr.co/plunk/j1vaGMNwkUNu3lgL/
https://embed.plnkr.co/plunk/oUdez6fkVcRI2uXO/
https://embed.plnkr.co/plunk/6SNpvy9IQs5WYm83/
https://embed.plnkr.co/plunk/1H5qu1bPBuSSZwVC/
https://embed.plnkr.co/plunk/GmEbgnd97w40fQwN/
https://embed.plnkr.co/plunk/1df5dUrkR7d0j9Fq/
https://embed.plnkr.co/plunk/3s5yILGP0Jh3uPla/
https://embed.plnkr.co/plunk/ARdGDegZGmbNSSTG/
https://embed.plnkr.co/plunk/WMinKQcFEKSarEoy/
https://embed.plnkr.co/plunk/arUs0ECz08qit54P/
https://embed.plnkr.co/plunk/PjtZKacJHtRvqXdL/
https://embed.plnkr.co/plunk/pJ0dgC6jKTiUaCtr/
https://embed.plnkr.co/plunk/rUpXnxhsQFz7agYs/
https://embed.plnkr.co/plunk/tOyDt7c2S3zRruQb/
https://embed.plnkr.co/plunk/z92SKEeekH9SLoHL/
https://embed.plnkr.co/plunk/YzeruHwiaxvyf5wL/
https://embed.plnkr.co/plunk/z1CkPCjmKDOXdbtG/
https://embed.plnkr.co/plunk/QGhFx1AQJuOZOwWO/
https://embed.plnkr.co/plunk/DcWblPj42wmkOEPi/
https://embed.plnkr.co/plunk/dpODnEK3rFi106hM/
https://embed.plnkr.co/plunk/ufbRulJ5Qn03C9n4/
https://embed.plnkr.co/plunk/QJw2rP1ZqB2FxNGW/
https://embed.plnkr.co/plunk/LDYCrs1qoyrpwbqu/
https://embed.plnkr.co/plunk/1vBsD3vAqqAo4k5N/
https://embed.plnkr.co/plunk/3itgtG0NtHad1nwr/
https://embed.plnkr.co/plunk/IMgjGBam5Y5RYWjk/
https://embed.plnkr.co/plunk/iaFDe7qIfYPZnfyX/
https://embed.plnkr.co/plunk/YmPzlsQd9aNls6hU/
https://embed.plnkr.co/plunk/xg1qxiltibuFwcTI/
https://embed.plnkr.co/plunk/xCfDjsE5CR9VwP0k/
https://embed.plnkr.co/plunk/yZ6ds4rbk7Ml4qy0/
https://embed.plnkr.co/plunk/OLpEsaZL9D61JRsg/
https://embed.plnkr.co/plunk/ssDW1EvQUlZriH8R/
https://embed.plnkr.co/plunk/0rMAE3ivoolD2UeL/
https://embed.plnkr.co/plunk/VybjhC1lcwKHIkYD/
https://embed.plnkr.co/plunk/BGKVrxNQa83b5D1G/
https://embed.plnkr.co/plunk/IwKbgAXpsOyDuEgu/
https://embed.plnkr.co/plunk/nT2wyjptNkvPBmIV/
https://embed.plnkr.co/plunk/M44HTbqxOGhBHMBO/
https://embed.plnkr.co/plunk/mX5kVArMJnO0jZ5F/
https://embed.plnkr.co/plunk/f3F68TWGZPsGENh6/
https://embed.plnkr.co/plunk/RhAfu7PVlQPqi120/
https://embed.plnkr.co/plunk/c1HNpcG0axSoHprQ/
https://embed.plnkr.co/plunk/sG0bTxgBcrEiiz2n/
https://embed.plnkr.co/plunk/UCSsyfvzc9648dVd/
https://embed.plnkr.co/plunk/ZtySSGfVe7JrGt5V/
https://embed.plnkr.co/plunk/X122HGocA1ffJdkb/
https://embed.plnkr.co/plunk/CMnwG1kbgpeFZ7A6/
https://embed.plnkr.co/plunk/zn02Cloz4yZSi8nG/
https://embed.plnkr.co/plunk/qaNpCpvTM0bu4O93/
https://embed.plnkr.co/plunk/a1r1EEgGOimehkFx/
https://embed.plnkr.co/plunk/hoA12VSn0wlF8RpY/
https://embed.plnkr.co/plunk/wwxHZM9c7lpNaJ9l/
https://embed.plnkr.co/plunk/TBOBHUOHNQUynTs3/
https://embed.plnkr.co/plunk/K4RyOoFaZ6nGakW4/
https://embed.plnkr.co/plunk/79T9xOf0avWhQceo/
https://embed.plnkr.co/plunk/B0HJBA71BmtsBgIl/
https://embed.plnkr.co/plunk/O6F8imRq3pPQrtAt/
https://embed.plnkr.co/plunk/WD91hkYcRhESKhWp/
https://embed.plnkr.co/plunk/6aqROGhRA0nmacot/
https://embed.plnkr.co/plunk/f7CgiEew2qiac8Qh/
https://embed.plnkr.co/plunk/SdoXPsyfkEl9f2nX/
https://embed.plnkr.co/plunk/YFOfR9ek4QoLv5QR/
https://embed.plnkr.co/plunk/qCTFwUFSx2QYQtdS/
https://embed.plnkr.co/plunk/Oz8itVfYaqWjG9o7/
https://embed.plnkr.co/plunk/wmpI8mWyeAi0uTps/
https://embed.plnkr.co/plunk/1NwVgoYGSZibk2Aq/
https://embed.plnkr.co/plunk/R9YRsbzD8De1FENG/
https://embed.plnkr.co/plunk/4FZ5eifayYni9K0r/
https://embed.plnkr.co/plunk/IgdBoYosNtKBo50z/
https://embed.plnkr.co/plunk/woFpwe44aDaIvLYv/
https://embed.plnkr.co/plunk/zE9ZJSmbEY5nzH1s/
https://embed.plnkr.co/plunk/yiM0CbnlEenhsPzD/
https://embed.plnkr.co/plunk/7x9ZHvl1UHonB0aJ/
https://embed.plnkr.co/plunk/CD4hdnklzXeibsCS/
https://embed.plnkr.co/plunk/FUICQvD19FifXsKL/
https://embed.plnkr.co/plunk/EsVuFq9CqXgV48sv/
https://embed.plnkr.co/plunk/CMPOhM3C3XfxhLdM/
https://embed.plnkr.co/plunk/yfwV92pO6DvQKWa2/
https://embed.plnkr.co/plunk/7X5VV6bdu2RWSL0u/
https://embed.plnkr.co/plunk/RkvHxMxDY0p5azb8/
https://embed.plnkr.co/plunk/A2b9AxeHmpyP6E2F/
https://embed.plnkr.co/plunk/PSrOZDSYNAvP3TjA/
https://embed.plnkr.co/plunk/2TaS8JL1XaeMyR8W/
https://embed.plnkr.co/plunk/aUgcQAgFTcuEZMy8/
https://embed.plnkr.co/plunk/AGujmUbtOuIvQ3Cc/
https://embed.plnkr.co/plunk/vj3v5llZElCHIPsY/
https://embed.plnkr.co/plunk/fkLokg9gTRk5HzuK/
https://embed.plnkr.co/plunk/7dttoX67DsqcttTy/
https://embed.plnkr.co/plunk/fAOqgkEUYxLsBbCw/
https://embed.plnkr.co/plunk/GvRr5EL83JLnQYWS/
https://embed.plnkr.co/plunk/xtKa1Cg4B7rjYSFy/
https://embed.plnkr.co/plunk/lHOX3Fwih95d0r1G/
https://embed.plnkr.co/plunk/RBaMQq3s3vpGxY57/
https://embed.plnkr.co/plunk/VbdhBjTE7DWDBaJk/
https://embed.plnkr.co/plunk/ygbmmtO3dw7SjcQv/
https://embed.plnkr.co/plunk/HXRNRY49BPw1YyXL/
https://embed.plnkr.co/plunk/rcceqtxrp1T5m5MD/
https://embed.plnkr.co/plunk/N6ugAhfmnShcFkpU/
https://embed.plnkr.co/plunk/KkJpTtXk4e1jxDPg/
https://embed.plnkr.co/plunk/sWR5JhceOObC3bv7/
https://embed.plnkr.co/plunk/QundHSdSApOhCJpm/
https://embed.plnkr.co/plunk/gj6k2wb7KfIeseQX/
https://embed.plnkr.co/plunk/BRSviY1k8w8avYze/
https://embed.plnkr.co/plunk/AJo6wvkwjENyVQeF/
https://embed.plnkr.co/plunk/3jFqRSpTNnD1FMVM/
https://embed.plnkr.co/plunk/XPq3ysYrrUWOHk3i/
https://embed.plnkr.co/plunk/sM2LGJqojMLSbBNl/
https://embed.plnkr.co/plunk/lp6PcnasxB7oLAcm/
https://embed.plnkr.co/plunk/yF2TFayq0vHdNLEP/
https://embed.plnkr.co/plunk/Mg8KoAAOMEizogYY/
https://embed.plnkr.co/plunk/CFe1W7a9zeAPt3De/
https://embed.plnkr.co/plunk/Zafm0FLfJlcUiFoU/
https://embed.plnkr.co/plunk/rTXpnKbBpOybFJSy/
https://embed.plnkr.co/plunk/HlzWdecut60hcNDa/
https://embed.plnkr.co/plunk/Hed2XcB8PqNnlHaI/
https://embed.plnkr.co/plunk/nYYhkxzHLn4qCxsi/
https://embed.plnkr.co/plunk/nxCCF3DuSuThGG6s/
https://embed.plnkr.co/plunk/E5Lw5KfifBNWafd4/
https://embed.plnkr.co/plunk/PbmLqgw6GcatQci6/
https://embed.plnkr.co/plunk/9nLAz3SSv5O2xx4E/
https://embed.plnkr.co/plunk/eCjwfS8bPwRt5a4P/
https://embed.plnkr.co/plunk/3cYdHeLIENdDCnxS/
https://embed.plnkr.co/plunk/ooEbBZvLlGveFx7m/
https://embed.plnkr.co/plunk/bcnxgEAnIJ5F5XV7/
https://embed.plnkr.co/plunk/jO7eUtcsU92adjZc/
https://embed.plnkr.co/plunk/sjEH2ils9UcjSmTh/
https://embed.plnkr.co/plunk/SimDEAZeSDJ9jiWy/
https://embed.plnkr.co/plunk/UbB0pmXRpTwH6rqj/
https://embed.plnkr.co/plunk/d5yjRQ8dopOT6UZt/
https://embed.plnkr.co/plunk/4FsJV5XFj5OsIVV0/
https://embed.plnkr.co/plunk/YdbBDsWiuAXBmRQs/
https://embed.plnkr.co/plunk/X9y4mgTmn8WXQ3HK/
https://embed.plnkr.co/plunk/D4TsOmPVEs9QCpau/
https://embed.plnkr.co/plunk/2bYtiaLlSD8O2Tm1/
https://embed.plnkr.co/plunk/PRAcH2dgWfkuAf6V/
https://embed.plnkr.co/plunk/PQLqh5DoLSW15O8z/
https://embed.plnkr.co/plunk/puGqn5NMquYwOo43/
https://embed.plnkr.co/plunk/8pKZUdUHw2zYe2YQ/
https://embed.plnkr.co/plunk/ZlKkin6OUY0nCRV4/
https://embed.plnkr.co/plunk/YlzS6bVynNiDie1B/
https://embed.plnkr.co/plunk/JFrQwriVZa4o03Uc/
https://embed.plnkr.co/plunk/wYL7L3AaijyMK5b0/
https://embed.plnkr.co/plunk/ZuSgsFEMulhQN0KT/
https://embed.plnkr.co/plunk/9hAbYHMT7NWEZFOx/
https://embed.plnkr.co/plunk/FMZ91AA2dIibUlT9/
https://embed.plnkr.co/plunk/D9vVD2wwacN4f3T7/
https://embed.plnkr.co/plunk/ti7FCvF1d0PnoOgb/
https://embed.plnkr.co/plunk/c9UhEHB8fv4Yes5V/
https://embed.plnkr.co/plunk/dlDyF5ebNzhY0ZWd/
https://embed.plnkr.co/plunk/ZtBgJjJkUEv6bS80/
https://embed.plnkr.co/plunk/ISHIysPqrKiqW8Bp/
https://embed.plnkr.co/plunk/FV6UTcU4OjkrD0Ep/
https://embed.plnkr.co/plunk/pszZFajA5UO5QXLE/
https://embed.plnkr.co/plunk/1bL5Bn9XX53Taud8/
https://embed.plnkr.co/plunk/B3XJFuLCqjS0E5fy/
https://embed.plnkr.co/plunk/oCKtmR1NeQZQJDV6/
https://embed.plnkr.co/plunk/H3G0EMTzNAZ1FNCn/
https://embed.plnkr.co/plunk/5UAOo8UHdqBv8Mzq/
https://embed.plnkr.co/plunk/Q34TnT6gzSMCWrPq/
https://embed.plnkr.co/plunk/4ZjeoznyDfA6kd5l/
https://embed.plnkr.co/plunk/9zKxjgQQbFA2BclG/
https://embed.plnkr.co/plunk/YnclaYbPi79lgNox/
https://embed.plnkr.co/plunk/HavIaMpgPMgjvx6G/
https://embed.plnkr.co/plunk/AL2alCzngWZe4jtB/
https://embed.plnkr.co/plunk/d6swESBkS3DboNZK/
https://embed.plnkr.co/plunk/2eRsBtvVLQRxZJVT/
https://embed.plnkr.co/plunk/aR61spJsSWJnB6k7/
https://embed.plnkr.co/plunk/ITksJsaAYsI8796t/
https://embed.plnkr.co/plunk/aMcdLqNCumL5Pz3d/
https://embed.plnkr.co/plunk/hRAp4LzMAOgfDcUQ/
https://embed.plnkr.co/plunk/Ft2eavMMsjzerecL/
https://embed.plnkr.co/plunk/2y1GVAwxaP7lmz1n/
https://embed.plnkr.co/plunk/NzhWZATXl4dlAyd4/
https://embed.plnkr.co/plunk/qr00XfR2aRqP2VKZ/
https://embed.plnkr.co/plunk/kdzc7hLtfqWeKAYV/
https://embed.plnkr.co/plunk/3uJco7j1jwPldyfE/
https://embed.plnkr.co/plunk/h2fNRbE7E901E4NF/
https://embed.plnkr.co/plunk/ZBimJ77T10MUoQmq/
https://embed.plnkr.co/plunk/YASLTbkfhvoiSXKV/
https://embed.plnkr.co/plunk/gewwPhtItWuLRvNn/
https://embed.plnkr.co/plunk/Gvs4n6itKYcuPbVu/
https://embed.plnkr.co/plunk/ckU94GGu0g6mQ0Ny/
https://embed.plnkr.co/plunk/myAamKOwaGxxYDJC/
https://embed.plnkr.co/plunk/0DM9NviJwcHr6IuQ/
https://embed.plnkr.co/plunk/2F7E1TFzLvlHQX8v/
https://embed.plnkr.co/plunk/v4xDuMpxw0KGWPny/
https://embed.plnkr.co/plunk/xWLSEVoYj4lGmf67/
https://embed.plnkr.co/plunk/8ISpbRqMXH68mQ7g/
https://embed.plnkr.co/plunk/b1M57PmrMN5yTvvU/
https://embed.plnkr.co/plunk/3cKWOUCg36UEEROA/
https://embed.plnkr.co/plunk/L2HHpZCVt2DffBaC/
https://embed.plnkr.co/plunk/K7E0ZlTbKs24dTzG/
https://embed.plnkr.co/plunk/Q4ccEEGAQsXpy7zG/
https://embed.plnkr.co/plunk/iGSnTBDvVwhcor4c/
https://embed.plnkr.co/plunk/9gHhRCa3pJhvk9w5/
https://embed.plnkr.co/plunk/IwhQiLUofGrfLuQW/
https://embed.plnkr.co/plunk/1l95qNDcGXJ9UBCX/
https://embed.plnkr.co/plunk/YEt8KB6rBc1M7slC/
https://embed.plnkr.co/plunk/5bzf8dpUfCHwU2dW/
https://embed.plnkr.co/plunk/Nb3MuQbz0IXfhxkB/
https://embed.plnkr.co/plunk/NKrFrjfL6gQZ3wqj/
https://embed.plnkr.co/plunk/wtWl5xDdKvdWtAst/
https://embed.plnkr.co/plunk/h3DL9EKGjv1zWbi2/
https://embed.plnkr.co/plunk/80lKnP7IzN0f8boy/
https://embed.plnkr.co/plunk/pEAlGR9eohMsJhH2/
https://embed.plnkr.co/plunk/clA8QzvXGJIOESEw/
https://embed.plnkr.co/plunk/aDBva7PrvqUs97BZ/
https://embed.plnkr.co/plunk/DwihuO5gKLSdLqIG/
https://embed.plnkr.co/plunk/Q6ZlTVr6OenvuUAS/
https://embed.plnkr.co/plunk/qPC2GWBVExTigDh0/
https://embed.plnkr.co/plunk/BVpLItaxORot6yme/
https://embed.plnkr.co/plunk/bi4lTAXUmUcmCUEH/
https://embed.plnkr.co/plunk/4gP9NE9sz07SHHM0/
https://embed.plnkr.co/plunk/MIaoM3MEbtO0rXNh/
https://embed.plnkr.co/plunk/7OJy1wx318I2FaM3/
https://embed.plnkr.co/plunk/CrShmelspfU2e01w/
https://embed.plnkr.co/plunk/vBNdh6VgbP4TMyxM/
https://embed.plnkr.co/plunk/WC1IuWnXRylobepS/
https://embed.plnkr.co/plunk/EymQuWaQ89zpjDEC/
https://embed.plnkr.co/plunk/0zVIEFejJr2fiDeI/
https://embed.plnkr.co/plunk/06jaMSXwe29M2qmY/
https://embed.plnkr.co/plunk/CX3pbTczSXPxggwR/
https://embed.plnkr.co/plunk/pfbVAsd9iRSna6pn/
https://embed.plnkr.co/plunk/2dZO2166TjHd5pmH/
https://embed.plnkr.co/plunk/7QHJTZpfwgPOKZ86/
https://embed.plnkr.co/plunk/0Ov9XG5evHsWZduL/
https://embed.plnkr.co/plunk/x6qMDwsP9foKVHiZ/
https://embed.plnkr.co/plunk/SxqJ8UIeUJkhk1Ht/
https://embed.plnkr.co/plunk/9gyUTd9ZhY1UQuqj/
https://embed.plnkr.co/plunk/vRgWRSsEcIQF7kdN/
https://embed.plnkr.co/plunk/ddVnVJPoYFjQLduY/
https://embed.plnkr.co/plunk/E99U73QdbgHsXdTi/
https://embed.plnkr.co/plunk/VrT1xR0j2XRxGu3H/
https://embed.plnkr.co/plunk/hVvUUE9mjO5HHU92/
https://embed.plnkr.co/plunk/9L7Jkx6uk931XtXD/
https://embed.plnkr.co/plunk/wAzJfilcOLCEhEtO/
https://embed.plnkr.co/plunk/FZ4b2e7uADH2v8RW/
https://embed.plnkr.co/plunk/Qg42GKtZPKueU0eA/
https://embed.plnkr.co/plunk/Qv2bK4ornZokpYb9/
https://embed.plnkr.co/plunk/EkmhbdL0sgD9N5na/
https://embed.plnkr.co/plunk/ZkDCsDEAfKBTEA8U/
https://embed.plnkr.co/plunk/CsEWl9C1vgObBh5P/
https://embed.plnkr.co/plunk/xStOUHQLbJnDz8jI/
https://embed.plnkr.co/plunk/V0jrgXUJPoNUnHsi/
https://embed.plnkr.co/plunk/4ZELAUI6S9QBQfzz/
https://embed.plnkr.co/plunk/YLUsn0hN4f6fXq76/
https://embed.plnkr.co/plunk/Dx1ACbNFUmqUuZfh/
https://embed.plnkr.co/plunk/P5MULjeDf7rZCCI4/
https://embed.plnkr.co/plunk/a6xXJygSpQlWIsRH/
https://embed.plnkr.co/plunk/Wu6uSGLIiYEnAkpr/
https://embed.plnkr.co/plunk/duddtMUtbsZcJsOE/
https://embed.plnkr.co/plunk/xsf29VppNoXa6oLJ/
https://embed.plnkr.co/plunk/P4FBcey8LQFW70Y4/
https://embed.plnkr.co/plunk/XhbKk6SJZjfZZtbr/
https://embed.plnkr.co/plunk/5s2OLAWyiRg2ZlFa/
https://embed.plnkr.co/plunk/kreK976WJDY9ocgt/
https://embed.plnkr.co/plunk/uKCIdhfz5TdwICGY/
https://embed.plnkr.co/plunk/Hiu79O5GNgbOFHnC/
https://embed.plnkr.co/plunk/eqREmRMwV4Mi4Y0m/
https://embed.plnkr.co/plunk/UIARg9CnNSzvWzvN/
https://embed.plnkr.co/plunk/SdZaiwXeBYhDmw4L/