精华内容
下载资源
问答
  • Mask RCNN:项目地址《黑镜:圣诞特别篇》里,出现了...1、项目简介:你可以采用基于COCO训练集的预训练权重,需要GPU,不仅可以自动识别图像中的人,还可以识别包括汽车,背包等80多种常见的类别,不同于黑镜中的...

    Mask RCNN:项目地址

    《黑镜:圣诞特别篇》里,出现了“屏蔽”技术。不喜欢一个人,可以屏蔽他。这样,你们就再也看不见对方,也无法打电话、写信。甚至你看到电视机上的她和照片上的她,都只有一团模糊的影子。你的整个世界都会和她绝缘,直至她死掉。


    1、项目简介:

    你可以采用基于COCO训练集的预训练权重,不需要GPU,不仅可以自动识别图像中的人,还可以识别包括汽车,背包等80多种常见的类别,不同于黑镜中的黑科技但是又很接近。(PS:使用前需要下载maskrcnn预训练权重)

    在终端输入命令:

    wget https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5
    将权重和model.py在同一目录下。

    2、安装相应的库和环境


    Python 3.4+

    TensorFlow 1.3+

    Keras 2.0.8+

    Numpy, skimage, scipy, Pillow, cython, h5py

    matplotlib, imageio

    安装指令的话,直接在解压后的person-blocker-master文件中输入:

    pip3 install -r requirements.txt

    等待一会便可以自动安装,若安装出问题,可以尝试一下采用 sudo命令

    3、用法

    在项目文件终端输入:

    python3 person_blocker.py -i images/img3.jpg -c '(128, 128, 128)' -o 'bus' 'truck'

    这个命令如下有一些参数来控制模型的推断效果:


    • -i/--image:指定输入图像的路径与文件。

    • -m/—model:加载预训练 COCO 模型权重的路径,默认情况下为当前目录。如果没有指定路径,且当前目录下不存在权重文件,那么模型将自动下载预训练权重至当前目录。

    • -c/—color:指定掩码的颜色,它可以是引号内的 16 进制或 RGB 三元素元组的格式,默认为白色。

    • -o/--object:遮掩目标的可用列表或具体目标的 ID,我们可以在文件 classes.py 中看到所有可遮掩的目标,或直接使用-names flag,默认的遮掩目标为「person」。

    • -l/—labeled:通过检测的目标和对应的目标 ID 标注图像并保存。

    • -n/—names:打印目标的类别选项,并退出。


    这一份脚本可输出两种图像,即静态的 png 图像和动态的 gif 图像。我们可选的遮掩目标有 80 种,如下 classes.py 文件中给出了所有的目标类别:

    def get_class_names():
        return np.array(['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane',
                         'bus', 'train', 'truck', 'boat', 'traffic light',
                         'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird',
                         'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear',
                         'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie',
                         'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
                         'kite', 'baseball bat', 'baseball glove', 'skateboard',
                         'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup',
                         'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
                         'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
                         'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed',
                         'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote',
                         'keyboard', 'cell phone', 'microwave', 'oven', 'toaster',
                         'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors',
                         'teddy bear', 'hair drier', 'toothbrush'])

    上面那条命令的效果:


    例如:
    1、python3 person_blocker.py -i images/img1.jpg

    屏蔽图片中的人


    2、python3 person_blocker.py -i images/img2.jpg -c '#c0392b' -o 'giraffe'

    屏蔽图片中的长颈鹿:


    遮掩特定的目标需要两个步骤:首先执行推断模型并获取所有的目标 ID,然后再根据 ID 选择性地遮掩这些目标。

    python3 person_blocker.py -i images/img4.jpg -l

    python3 person_blocker.py -i images/img4.jpg -o 1

    希望大家可以动手尝试一下!

    展开全文
  • 你有没有过看自己代码时候,看到瀑布一样的 for 循环?你是否发现自己不得眯着眼睛,向显示器前倾才能看得更清楚?我知道我有过。For 循环是解决问题瑞士军刀,但是,当需要浏览代码以快速阅读你所做事情...

    作者:Jonathan Hsu

    编译:ronghuaiyang

    导读

    想不想去掉瀑布一样的For循环?使用函数式编程来写代码。

    你有没有过看自己的代码的时候,看到瀑布一样的 for 循环?你是否发现自己不得不眯着眼睛,向显示器前倾才能看得更清楚?

    我知道我有过。

    For 循环是解决问题的瑞士军刀,但是,当需要浏览代码以快速阅读你所做的事情时,它们可能会让人不知所措。

    有三种技术 — map、filter 和 reduce — 可以通过描述如何进行迭代来代替 for 训练。JavaScript 中也有这些技术,但是在 Python 中的实现略有不同。

    我们将简要介绍这三种技术中的每一种,强调它们在 JavaScript 和 Python 中的语法差异,然后给出如何转换普通 for 循环的示例。

    什么是 Map, Filter, 以及 Reduce?

    回顾之前写的代码,我发现在 95%的情况下,当循环遍历字符串或数组时,我是这样做的:将序列map到每个值,filter满足特定条件的值,或者将数据集reduce到单个聚合值。

    有了这样的认识,这三种方法就是识别 —— 然后实现,你遍历 iterable 的原因通常属于这三种功能中的一种:

    Map:对每个一项应用相同步骤的操作,然后存储结果。

    Filter:应用验证标准,存储评估为真的项。

    Reduce:返回一个在元素之间传递的值。

    Python 中 Map/Filter/Reduce 的不同点是什么?

    在 Python 中,这三种技术以函数的形式存在,而不是以数组或字符串类的方法。这意味着不要写成my_array.map(function),而要写成map(function, my_list)。

    此外,每种技术都需要传递一个函数,该函数将为每个一项执行。通常,函数被写成匿名函数(在 JavaScript 中称为胖箭头函数)。但是,在 Python 中经常看到使用 lambda 表达式。

    lambda 表达式和箭头函数之间的语法实际上非常相似。将' => '替换为':',并确保使用关键字' lambda ',其余内容几乎相同。

    // JavaScript Arrow Function

    const square = number => number * number;

    // Python Lambda Expression

    square = lambda number: number * number

    箭头函数和 lambda 表达式之间的一个关键区别是,箭头函数可以扩展成包含多条语句的完整函数,而 lambda 表达式则被限制为返回的单个表达式。因此,在使用map()、filter()或reduce() 的时候,如果你需要对每个项执行多个操作,那么首先定义函数,然后将其包含进来。

    def inefficientSquare(number):

    result = number * number

    return result

    map(inefficientSquare, my_list)

    替换 For 循环

    好吧,说正事。下面是三个常见的 for 循环示例,它们将被 map、filter 和 reduce 替换。我们的编程提示:计算列表中奇数的平方和。

    首先,使用 basic for 循环的例子。注意:这纯粹是为了演示,甚至可以在没有 map/filter/reduce 的情况下进行改进。

    numbers = [1,2,3,4,5,6]

    odd_numbers = []

    squared_odd_numbers = []

    total = 0

    # filter for odd numbers

    for number in numbers:

    if number % 2 == 1:

    odd_numbers.append(number)

    # square all odd numbers

    for number in odd_numbers:

    squared_odd_numbers.append(number * number)

    # calculate total

    for number in squared_odd_numbers:

    total += number

    # calculate average

    让我们把每一步转换为一个函数:

    from functools import reduce

    numbers = [1,2,3,4,5,6]

    odd_numbers = filter(lambda n: n % 2 == 1, numbers)

    squared_odd_numbers = map(lambda n: n * n, odd_numbers)

    total = reduce(lambda acc, n: acc + n, squared_odd_numbers)

    有几个重要的语法点需要突出显示。

    map()和filter()是本地可用的。但是,reduce()必须从 Python 3+的functools库中导入。

    lmbda 表达式是所有三个函数中的第一个参数,而 iterable 是第二个参数

    reduce()的 lambda 表达式需要两个参数:累加器(传递给每个元素的值)和单个元素本身。

    本文转自:AI公园,原作者:Jonathan Hsu,编译:ronghuaiyang,转载此文目的在于传递更多信息,版权归原作者所有。

    展开全文
  • 这几天一直弄关于Canvas方法调用顺序不同导致效果不一样的測试。 至于原理,我canvas和Matrix之间关系能够看到原因。还是就是每一个要多去尝试,才干真正理解透彻。 接下来我解说一下第一张图五个标签意义...

    这几天一直弄关于Canvas方法调用顺序不同导致效果不一样的測试。

    至于原理,我的canvas和Matrix之间的关系能够看到原因。还是就是每一个人要多去尝试,才干真正理解透彻。

    接下来我解说一下第一张图五个标签的意义;

    第一顺序图片是正常全屏显示在800*1280的手机上的。没有任务效果。只是原图是720*1280,所以为了满足手机的屏幕大小,他进行了等倍数的放大。

    第二顺序图效果是进行PolyToPoly之后的图片,没有进行区域剪切。

    第三顺序图是先剪切显示区域,然后PolyToPoly以后的图。

    第四顺序图是仅仅是剪切显示区域,没有polytopoly。

    第五顺序图表示先polytopoly,然后剪切区域。

    既然这样,那就谈谈自己对这样效果的看法。假设有什么不正确的地方,网友能够留言给我。

    第三顺序的图的源代码是:

    mBmp=BitmapFactory.decodeResource(getResources(), R.drawable.guide_page01);
    canvas.save();  
    float src[]={0,0,getWidth(),0,getWidth(),getHeight(),0,getHeight()};
    float sou[]={0,0,(float)(getWidth()),(float)(100),(float)(getWidth()),(float)(200),0,(float)(getHeight())};
    m.setPolyToPoly(src, 0, sou, 0, src.length/2);

    canvas.clipRect(getWidth()/2-getWidth()/6, getHeight()/2-getWidth()/6, getWidth()/2+getWidth()/6, getHeight()/2+getHeight()/6);
    canvas.concat(m);

    canvas.drawBitmap(mBmp,0,0,null);
    super.onDraw(canvas);
    canvas.restore();  

    表示的是,我已经剪切好要显示的区域,以后不管图片怎样变化矩阵,我仅仅是显示当前的区域。所以polytopoly尽管对全局进行了变化。可是显示区域还是一样不变。

    第四顺序图的源代码是:

    mBmp=BitmapFactory.decodeResource(getResources(), R.drawable.guide_page01);
    canvas.save();  
    float src[]={0,0,getWidth(),0,getWidth(),getHeight(),0,getHeight()};
    float sou[]={0,0,(float)(getWidth()),(float)(100),(float)(getWidth()),(float)(200),0,(float)(getHeight())};
    m.setPolyToPoly(src, 0, sou, 0, src.length/2);

    canvas.clipRect(getWidth()/2-getWidth()/6, getHeight()/2-getWidth()/6, getWidth()/2+getWidth()/6, getHeight()/2+getHeight()/6);
    //canvas.concat(m);

    canvas.drawBitmap(mBmp,0,0,null);
    super.onDraw(canvas);
    canvas.restore();  

    表示除去polytopoly的矩阵变化。

    仅仅是显示剪切区域的图片显示。

    第五顺序图的源代码是:

    mBmp=BitmapFactory.decodeResource(getResources(), R.drawable.guide_page01);
    canvas.save();  
    float src[]={0,0,getWidth(),0,getWidth(),getHeight(),0,getHeight()};
    float sou[]={0,0,(float)(getWidth()),(float)(100),(float)(getWidth()),(float)(200),0,(float)(getHeight())};
    m.setPolyToPoly(src, 0, sou, 0, src.length/2);

    canvas.concat(m);

    canvas.clipRect(getWidth()/2-getWidth()/6, getHeight()/2-getWidth()/6, getWidth()/2+getWidth()/6, getHeight()/2+getHeight()/6);
    canvas.drawBitmap(mBmp,0,0,null);
    super.onDraw(canvas);
    canvas.restore();  

    他对第四顺序图的polytopoly矩阵变化。他表示的是,我想进行polytopoly矩阵变化,可是我想要看到的变换区域就仅仅有我想要剪切的区域。

    所以就呈现例如以下第五顺序的效果。

    从以上得出一个结论:polytopoly矩阵变换仅仅对后面的图形剪切才有效。前面的剪切不会影响后面原图的变换。仅仅是固定了显示区域。

    转载于:https://www.cnblogs.com/ljbguanli/p/7397554.html

    展开全文
  • 我们随手拍摄的照片,很难达到...不过对图片直接操作与从零开始着笔不一样,要将原始图片进行两次不同的处理,再将处理后的两个图片叠加。 边缘轮廓 漫画中不管是人物还是风景,刻画的细节有限,因此需要把重要以及有特
  • 每次打开手机都能看到不一样的图片,而每一张图片都关联了相关文章,因此闲暇之余,我们可以简简单单滑动手机锁屏,就不仅能浏览欣赏美图,还能增加知识,了解照片和摄影背后故事。现在,我每一次打开手机内心...

    如今,很多人不仅仅只追求硬件,同时也更加追求功能的质量。一部硬件好的手机功能不好,依然会有很多人不买账。欢太科技当然注意到了这一点,因此他兼顾硬件和功能,在研发硬件技术的同时,也更加注重功能的优化改进和更新。
    在这里插入图片描述
    最近,我最喜欢的就是乐划锁屏。每次打开手机都能看到不一样的图片,而每一张图片都关联了相关的文章,因此闲暇之余,我们可以简简单单滑动手机锁屏,就不仅能浏览欣赏美图,还能增加知识,了解照片和摄影背后的故事。现在,我每一次打开手机内心都会充满了期待,我期待看到不一样的山水好景、奇珍异玩等,也期待看到每一张图片背后隐藏的不一样的故事和来源。这无疑能让我在忙碌的工作中,获得一些慰藉,抚平我的焦虑,也一点点增加了我的见识。
    在这里插入图片描述

    锁屏“划”起来就可以看到,在乐划锁屏,我们将看到许多著名摄影师的作品,比如故宫、时尚芭莎、国家地理、摄影之友等,这里有多个优质内容号,为我们提供和展示精美优秀的作品,还能让我们学会很多关于摄影的知识。通过乐划锁屏,我看了被白雪覆盖的故宫、定制超跑、月偏食的过程图等等,这些内容我都不能在我的生活中亲眼看到,但有了乐划锁屏,我将更容易去观赏到这些我原本看不到的东西,让我知道世界之外都有什么。

    在这里插入图片描述

    我喜欢并且深深感谢乐划锁屏,因为它给了我不一样的体验,让我能行走与世界的每一个角落,不错过任何一次世界奇观。而且它无需下载,占的内存也很少,非常让人省心省事!

    在这里插入图片描述

    这些年来,我一路见证着欢太科技的努力,他一次次用他的成果告诉我他非常在乎每一个用户,真心接受每一个建议,如此优秀的公司创造了像乐划锁屏一类的好产品,让我们的每一个需求都得到满足,我想我将始终选择欢太。

    展开全文
  • 图片来源:pixabay也正是由于标签在产品包装中重要作用,很多就疑惑,这些瓶瓶罐罐上标签形状不同,大小不一样,到底是怎么弄上嘞?图片来源:pixabay半自动化贴标机是需要人工辅助贴标机才能完成工作,即...
  • DW本身是没有这样的功能的,如果非要如此,可能是需要滤镜效果才能够体现,但是这样是不不足的地方的,比如每款浏览器支持的滤镜的代码是不同的,效果也是不一样的,再者一张不足够大的图片做为背景还要拉伸的话,...
  • 编辑请点击输入图片描述莫北:最好的相处状态,才能得到最好的爱爱情是个非常奇妙的东西,在人生的每一个阶段,我们所看到的爱情都有不一样的色彩,所以不同年纪的人看爱情都有不一样的感悟。年轻的时候,很多人肯定...
  • 最后,正像公民吃饭并伤害他人一样,公民做爱在网上看×××品也并会伤害到他人,他在网上看×××图片写淫秽小说只不过是满足或宣泄了他个人一点欲 望,对他身心健康有益无害,对社会秩序、对他人生活也...
  • 因为不同类型的值有着不同的目的。 像绝大多数app一样,倘若你的应用只有一个单一的入口,enter项的值你可以使用任意类型,最终输出的结果都是一样的。 <p><img alt="Different entry types but ...
  • -exifmap显示头信息,总之跟v不一样 -se简化显示 -c精简显示(比-se更简单) -dc删除jpg信息中备注 -de完全删除exif信息 -du删除非原始exif信息,例如Photoshop之类编辑后修改exif留下信息 -purejpg删除所有jpg...
  • 与预览窗格用户的帮助下,可以看到自己的形象如何将看起来与应用了不同的任务。 加载您喜欢的批处理任务保存 保存和加载自己喜欢的任务是构建以参考使用它们存储在计算机上的.bsv文件一样容易。每个.bsv文件代表一...
  • 最可气是每次遇到问题一定一样,上一次使用方法一定适用。网上教程很多,但没有看到一个完整、必杀解决方案。我在花了大量时间进行多次尝试之后,总结出了一套流程,截止目前我遇到过所有的不同...
  • 【4】视频号和朋友圈区别

    千次阅读 2020-06-28 00:20:38
    首先,看到的范围不一样 这是两者最大的区别:朋友圈你只能看到微信好友发布的视频,而在视频号,你能看到所有做的精心视频。 也就是说,朋友圈看到的是仅仅是你的好友动态,而视频号看到的,是全世界。 其次,...
  • 每个都会给你不同的答案,因为每个的感觉都是不同的,虽然有许多一辈子也不会感受到爱情,但他们还是会幻想那种感觉,而甚至,那种感觉也没有一样的。 爱情是什么?是斑马的斑纹,是你的初吻,是阳光灿烂...
  • 4.7.5 把分区移动到不同的表 161 4.7.6 移除分区函数和分区方案 162 4.7.7 用文件组提高VLDB的可管理性 162 4.7.8 用数据压缩减少磁盘空间使用 164 第5章 索引 167 5.1 索引预览 167 5.1.1 创建表索引 ...
  • 【保护公式】保护当前工作表所有公式,人看到公式本身,只能看到公式结果。 【生成千年日历】工单元格中生成千年日期。默认显示本月日历,可以自由调整年月。 【生成斜线表头】Excel没有Word那样斜线表头...
  • 这是一个很简单的需求,就像我们常用 Unix 的人每天遇到的一样。他的问题是,如何删除文件中的重复行,只保留重复的。 这听起来似乎很简单,但是当文件足够大时,就会有些复杂。这个问题有很多种不同的答案。你...
  • flashmtv制作

    2011-11-17 18:15:11
    你可以根据自己爱好和习惯设置,有朋友喜欢用遮罩,也可以建立遮罩层,至于怎样排列,根据自己情况而定,有些习惯把每句歌词或者每张图片都建一个单独层,这也未尝可,建议建一个层文件夹,把新建歌词...
  • 而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。...
  • 这与汽车不一样,汽车可以有爱好者,房地产似乎鲜有爱好者。整形医院也不适合,因为没会整形之后与朋友分享,但牙科医院是其中例外。有一家重型卡车正在寻找微博运营商,也不适合,用户根本不在微博。银行可以做...
  • 这与汽车不一样,汽车可以有爱好者,房地产似乎鲜有爱好者。整形医院也不适合,因为没会整形之后与朋友分享,但牙科医院是其中例外。有一家重型卡车正在寻找微博运营商,也不适合,用户根本不在微博。银行可以做...
  • 而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。...
  • 不同云计算平台提供 Serverless 服务很可能是不一样的,这就导致我们代码,无法平滑迁移。Serverless 框架一个主要功能是简化 Serverless 开发、部署流程,另一主要功能则是屏蔽不同 ...
  • 而且每个不一样。第一次碰到这种需求时候,基本上都会去手撸canvasAPI去做渲染功能,这种情况步骤大致如下: 1. 写一大串 dom template 标签 2. 渲染template成dom标签 3. 开始捕捉dom...
  • 视觉实验(一):混合图像

    千次阅读 2019-03-18 22:17:10
    这样合成的结果就使得同一张图片在远点与近点看到的东西并不一样。 互相关本身为图片与核函数直接点乘得到的结果。 卷积在学术上为把图片反转180度后进行(虽然目前的卷积都是直接点乘) 所谓高频,是指一个信...
  • CDN是什么鬼

    2019-11-21 17:17:41
    我们还是从之前介绍的《不同的人看到的直播为什么不一样?》这篇文章切入,讲讲CDN是什么。 从直播说起 图片发自简书App 还记得这个图吧,直播的主播通过自己的手机把“视频图”发给了观众,观众收到后,...
  • 问题:正常的动画位置应该在...对比之前导入的素材图片,我发现新导入的这个参数和之前的不一样。修改为一样的后运行正常。 找bug真的好费时间啊。。。 之前还看到有帖子说要写代码修改坐标,果弃了好吗。。。 ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 134
精华内容 53
关键字:

不同的人看到的不一样图片