创建博客-完善关注功能(1)

在资料页中显示关注者

如果用户查看一个尚未关注用户的资料页,页面中要显示一个“Follow”(关注)按钮,如果查看已关注用户的资料则显示“Unfollow”(取消关注)按钮,并且,页面中最好能显示出关注者和被关注者的数量,再列出关注和被关注者的用户列表,并在相应的用户资料页中显示“Follow You”(关注了你)标志,对用户资料页模板的改动如下例所示:

# app/templates/user.html

#...

{% if current_user.can(Permission.FOLLOW) and user != current_user %}
          {% if not current_user.is_following(user) %}
          <a href="{{ url-for('.follow', username=user.username) }}"
            class="btn btn-primary">Follow</a>
          {% else %}
          <a href="{{ url_for'.unfollow', username = user.username) }}"
            class="btn btn-default">Unfollow
            </a>
          {% endif %}
        {% endif %}
        <a href="{{ url_for('.followers', username=user.username) }}">
          Followers:<span class='badge'>{{ user.followers.count() }}</span>
        </a>
        <a href="{{ url_for(.followed_by, username=user.username) }}">
          Following:<span class="badge">{{ user.followed.count() }}</span>
        </a>
        {% if current_user.is_authenticated() and user != current_user and user.is_following(current_user) %}
        | <span class="label label-default">Follows you</span>
        {% endif %}

这次修改模板用到了4个新端点,用户在其他用户的资料页中点击”Follow”(关注)按钮后,执行的是/follow/路由,这个路由的实现方法如下:

# app/main/views.py

#...

@main.route('/follow/<username>')
@login_required
@permission_required
def follow(username):
    user = User.query.filter_by(username=username).first()
    if user is None:
        flash('Invalid user.')
        return redirect(url_for('.index'))
    if current_user.is_following(user):
        flash('You are already following this user.')
        return redirect(url_for('.user',username=username))
    current_user.follow(user)
    flash('You are now following %s.' % username)
    return redirect(url_for('.user',username=username))

这个视图函数先加载请求的用户,确保用户存在且当前登录用户还没有关注这个用户,然后调用User模型中定义的辅助方法follow(),用以联接两个用户 /unfollow/<username>路由的实现方式类似

用户在其他用户的资料页中点击关注者数量后,将调用/followers/<username>路由,这个路由的实现如下所示:

# app/main/views.py
# ...
@main.route('/followers/<username>')
def followers(username):
    user = User.query.filter_by(username=username).first()
    if user is None:
        flash('Invalid user.')
        return redirect(url_for('.index'))
    page = request.args.get('page', 1, type=int)
    pagination = user.follower.paginate(
        page, per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'],
        error_out=False)
    follows = [{'user': item.follower, 'timestamp':item.timestamp}
           for item in pagination.items]

    return render_template('followers.html', user=user, title='Followers of',
                            endpoint = '.followers', pagination=pagination,
                            followers=followers)

这个函数加载并验证请求的用户,然后使用之前介绍的技术分页显示该用户的followers关系,由于查询关注者返回的是Follow实例列表,为了渲染方便,我们将其转换成一个新列表,列表中的各元素都包含usertimestamp字段

渲染关注者列表的模板可以写的通用一些,以便能用来渲染关注的用户列表和被关注的用户列表,模板接受的参数包括用户对象、分页链接使用的端点、分页对象和查询结果列表

followed_by端点的实现过程几乎一样,唯一的区别在于:用户列表从user.followed关系中获取,传入的模板的参数也要进行响应调整

followers.html模板使用两列表格实现,左边一列用于显示用户名和头像,右边一列用于显示Flask-Moment时间戳

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当前,随着国际国内形势的变化,安全已经成为人们日益关注的问题,出于反恐安保的需要,智能视频监控已经广泛运用在奥运会、世博会、青奥会等大型赛事活动安保工作。不仅国家安全需要智能视频监控,社会安全也需要视频监控系统,当前在工厂、酒店、超市、码头、学校、家庭、政府部门、银行等等,都广泛采用了智能视频监控系统保障人身安全、财产安全和交通安全。 视频监控技术主要经历了三个发展阶段,第一阶段是人力现场监控,即通过肉眼和人脑对现场情况进行监控,这是几千年来的传统做法,能起到一定的效果,但需要耗费大量的人力物力,而且限于人的视力和脑力,起到的监控效果受到很大的限制。第二阶段是传统视频监控,即通过机器眼和人脑进行监控,即通过摄像机或者其他视频采集设备获取现场视频,然后靠人脑对视频对判断处理,这种方式极大的提升了视频的采集能力,基本能做到全天候、无死角的还原现场情况,但受限于人脑的数据处理能力,没有能力将视频获取的海量数据进行实时处理分析,限制了监控效果的进一步提高。第三阶段是智能视频监控,就是利用计算机对摄像机或者其他视频采集设备获取的现场视频自己进行内容分析,从而自动检测与识别出需要掌握的信息,并给出相应的预警预报信号。 三个阶段图 实验表明:在盯着视频画面仅仅22分钟后,人眼会对画面里面95%以上的活动视而不见。 智能监控系统的应用全文共5页,当前为第1页。 智能监控系统的应用全文共5页,当前为第1页。 1997年,卡内基梅隆大学牵头,麻省理工学院等高校参与的视觉监控重大项目VSAM启动,主要研究用于战场及普通民用场景监控的自动视频理解技术。1999年,康奈尔大学设计了一套航拍视频检测与持续跟踪系统,该系统能够对多运动目标实现长时间的准确跟踪,即使发生短时间内目标被遮挡或目标时静时动的情况仍可以完成跟踪,这点对于空侦察或者追踪意义重大。2003年法国的SILOGIC公司和英国雷丁大学等机构参与研究的AVITRACK项目,检测和跟踪机场停机坪出现的飞机、汽车以及行为等运动目标,辅助机场管理人员进行管理和调度,不仅可以提高机场利用率,而且可以提高机场安全管理水平。 目标跟踪就是将视频的每一帧图像确定出要检测的运动目标位置,并把各个帧同一运动目标对应起来。 主要难度来源于局部遮挡、姿势变化、运动模糊、光照变化等因素 一般跟踪选择 颜色特征、边缘特征、光流、或者纹理,代表性的方法有均值漂移法(Meanshift):无参核密度估计。卡尔曼滤波:线性、高斯。扩展卡尔曼滤波(EKF):非线性、高斯。粒子滤波(PF):非线性、非高斯。 几个代表性目标检测与跟踪算法 智能监控系统的应用全文共5页,当前为第2页。帧差法 :适合摄像头固定的场景,利用建立的背景模型来生成背景图像的像素值,然后将当前帧与背景图像求差,差值较大的像素区域被认为是运动目标区域,而差值较小的像素区域被认为是背景区域。 智能监控系统的应用全文共5页,当前为第2页。 Camshift跟踪算法 对室内环境下的目标跟踪具有较高的鲁棒性 光流跟踪算法,运动物品在观测成像面上的像素运动的瞬间速度 粒子滤波跟踪算法,粒子滤波跟踪算法可以跟踪速度较快的目标。但对复杂环境的目标跟踪鲁棒性不足。 国科学院自动化所的生物识别与安全技术研究心CBSR 采用人工监控的传统统计方法,不仅费时费力,且无法保障统计精度。实时可靠的人流量统计信息在交通控制、商业分析、节假日出行人数统计等许多领域同样具有非常重要的意义。 传统检测方法 超声波、红外、感应线圈 缺点:成本高、需要专门安装、移动困难,适应性差。 精度较低且仅用于稀疏、几乎无遮挡的人群 作用的范围小 基于视频图像分析的优点 成本低、安装灵活、精度高 应用前景广阔 利用现有摄像头就可以实现人群密度估计并进行人流量计数。 智能监控系统的应用全文共5页,当前为第3页。沈阳天目科技有限公司的商场客流统计、超市客流统计。南京恩能自动化设备有限公司提高的客流量统计系统解决方案。杭州海康威视软件有限公司的发明专利:人流量统计的方法及系统。 智能监控系统的应用全文共5页,当前为第3页。 场景标定-----人头检测----人头目标跟踪----人头目标运动轨迹分析-----人流量统计 基于人体的跟踪检测 目前存在的问题: [11]沈阳天目科技有限公司http://www.tymo.cn/Demo.aspx. [12]南京恩能自动化设备有限公司http://inovoauto.1688.com/. [13] Z. Wang, H. Liu, Y. Qian and T. Xu. Crowd density estimation based on local binary pattern cooccurrence matrix. ICMEW 2012. [14] A. B

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值