基于opencv的厨余垃圾破袋分类收集系统
开始前先啰嗦一下!!!
为什么创作?
答: 在垃圾分类背景下,许多居民都能做到在家中进行厨余垃圾分袋、分类收集,但在最后投放一步却打消了许多居民的积极性,原因是居民在投放厨余垃圾时还得将塑料袋和厨余垃圾分离,其流程相对麻烦且不卫生。居民投放厨余垃圾时,需先将厨余垃圾从袋子倒进厨余垃圾桶,再把塑料袋扔到另一个垃圾桶中,这过程不仅容易脏手,还常常造成回收点周边滴漏多、臭味大等问题。在此背景下,我们期望通过计算机视觉和自动化等技术助力厨余垃圾分类投放的最后一环节,实现无接触投放、自动破袋分类。
进入正题!!!
基于什么开发?
答: 系统使用的硬件有:
旭日x3派开发板mega 2560开发板摄像头步进电机a4988步进电机驱动模块超声波舵机6个
系统使用的软件有:
ubuntu20ardunio idepycharmopencv
第一次使用linux平台进行裸机开发,之前一直使用普通的单片机,旭日x3派裸机开发和树莓派基本差不多,根据官方文档,上手非常简单。旭日x3派主要是用来跑opencv的图像处理,对图像处理后对步进电机进行相应的控制,旭日x3派通过i2c通信和mega 2560开发板进行数据交互,mega 2560再去接收传感器数据和控制舵机等。这里为什么不直接用x3派来控制舵机和采集传感器数据呢?x3派也有硬件pwm信号,但是其频率太高,如果模拟pwm,在linux中并不太理想,还有个原因是需要一直给屏幕输出画面,因此使用了多进程,但我发现使用了多线程后,步进电机的控制并不太顺,感觉会出现丢步,所以这种情况更不用说去控制别的了,说不定会出其他问题。以上这些问题还没有找到很好的解决方法,反正多线程是不行的了。
基本的实现过程: 第一次使用了opencv,只是使用了简单的图像处理
将背景布置为白色的前提下,使用opencv从摄像头拉取视频流,设置图像分辨率为1280x720,逐帧读取图像,将原始 bgr 彩色图像转换为灰度图像;对灰度图像进行二值化处理,颜色较深的区域设为白色,其余设为黑色,将目标物体从背景中分离出来,以便于后续的轮廓分析图像;执行形态学变换操作,消除二值化图像中的孔洞和噪点,增强物体轮廓的连通性;通过轮廓检测检测[2]图像中的边缘轮廓,并遍历计算轮廓面积,根据设定的阈值过滤掉面积过小的轮廓,从而找到物体的边缘;进行多边形逼近,如果逼近后的多边形有4个顶点,且类似塑料袋的形状,则可确定该物体为目标物体,绘制矩形框以标记目标物体,最后使用numpy库遍历目标物体轮廓计算出塑料袋轮廓最左边点(leftmost)、最右边点(rightmost)和最底边点(bottommost)的坐标并保存,为后续检测位置和识别破袋状况提供数据基础。 在破袋系统中采集的图像,元素较单一,塑料袋占据了大部分画面,而且不同规格的塑料袋形状差异小,宽度由上往下呈增加趋势,因此在视觉检测塑料袋位置大小和识别破袋状况算法上巧妙利用了以上特征[3]。前期图像处理已标记到了目标物体(塑料袋),并获得塑料袋轮廓相关点坐标。 ?通过计算left_most[x]与right_most[x]的差与bottom_most[y]的值可以得知塑料袋相对宽度和相对长度,进而用于判断塑料袋大小:
?计算left_most[x]和ight_most[x]的中点确定水平位置,bottom_most[y]确定垂直位置:
?通过判断在不同时间点相对大小的值的变化与形状的变化识别塑料袋内的厨余垃圾是否分离:
图像处理实现的代码:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# -*-coding:gb2312-*
import cv2
import time
import os
import numpy as np
import global_val
# 摄像头是否打开
camera_open = false
# 摄像头开关
camera_state = true
# 获取当前时间的字符串形式
def get_current_time_str():
return time.strftime('%y%m%d_%h%m%s', time.localtime(time.time()))
# 拍照并保存照片
def capture_photo(cap):
# 获取一帧图像
ret, frame1 = cap.read()
# 调整图像尺寸
frame1 = cv2.resize(frame1, photo_size)
# 保存照片
# file_name = f'{get_current_time_str()}.jpg'
file_name = f'11.jpg'
file_path = os.path.join(global_val.save_path, file_name)
cv2.imwrite(file_path, frame1)
def shibie(path, a):
# 读取图像
if a:
img = cv2.imread(path)
else:
img = path
# 将图像转为灰度图像
gray = cv2.cvtcolor(img, cv2.color_bgr2gray)
# 对灰度图像进行二值化处理,将颜色较深的区域设为白色,其余设为黑色
_, thresh = cv2.threshold(gray, 0, 255, cv2.thresh_binary_inv cv2.thresh_otsu)
# 找到轮廓
contours, _ = cv2.findcontours(thresh, cv2.retr_external, cv2.chain_approx_simple)
# 找到最大的轮廓
max_contour = max(contours, key=cv2.contourarea)
# 计算最大轮廓的外接矩形
x, y, w, h = cv2.boundingrect(max_contour)
area = cv2.contourarea(max_contour)
# 仅对面积较大的轮廓进行处理,过滤掉一些噪声
if area > 10000 and h < 720 and w < 1280:
# 在原图上绘制矩形框
cv2.rectangle(img, (x, y), (x w, y h), (0, 255, 0), 2)
# 计算最左边、最右边和最底边的点的坐标
leftmost = tuple(max_contour[max_contour[:, :, 0].argmin()][0])
rightmost = tuple(max_contour[max_contour[:, :, 0].argmax()][0])
bottommost = tuple(max_contour[max_contour[:, :, 1].argmax()][0])
global_val.leftmost = leftmost
global_val.rightmost = rightmost
global_val.bottommost = bottommost
# 在最左边、最右边和最底边的点的范围画一条水平线
cv2.line(img, (leftmost[0], leftmost[1]), (rightmost[0], rightmost[1]), (0, 0, 255), 2)
cv2.line(img, (bottommost[0], bottommost[1]), (leftmost[0], leftmost[1]), (0, 0, 255), 2)
cv2.line(img, (bottommost[0], bottommost[1]), (rightmost[0], rightmost[1]), (0, 0, 255), 2)
if __name__ == '__main__':
print('yes')
旭日x3派的io操作的实现过程
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# -*-coding:gb2312-*
import hobot.gpio as gpio
import time
dirpin_x = 16
steppin_x = 18
steps_per_rev = 200
dirpin_y = 22
steppin_y = 24
limit_pin_xy = 32
chufa_pin_1 = 29
chufa_pin_2 = 31
limit_x = 1
limit_y = 0
# 步进电机运动方向
r_d = 0
l_u = 1
# 红外触发信号
gpio_1 = false
gpio_2 = false
def delaymicroseconds(t):
t = t / 1000000
delay_mark = time.time()
while true:
offset = time.time() - delay_mark
if offset >= t:
# print(offset * 1000000)
# print(delay_mark * 1000000)
break
def io_begin():
gpio.setmode(gpio.board) # board pin-numbering scheme
gpio.setup(limit_pin_xy, gpio.in)
gpio.setup(chufa_pin_1, gpio.in)
gpio.setup(chufa_pin_2, gpio.in)
gpio.setup(dirpin_y, gpio.out)
gpio.setup(dirpin_x, gpio.out)
gpio.setup(steppin_x, gpio.out)
gpio.setup(steppin_y, gpio.out)
# x轴low为往右
# y轴low为往下
def chufa(signal):
global gpio_1
global gpio_2
while true:
value = gpio.input(chufa_pin_1)
gpio_1 = '1'
if value == gpio.low or gpio_1 == "1":
signal['qian_hw'] = true
print('', signal['qian_hw'])
break
while true:
value = gpio.input(chufa_pin_1)
gpio_2 = '1'
if value == gpio.low or gpio_2 == "1":
# signal['hou_hw'] = true
# print('', signal['qian_hw'])
break
while true:
value = gpio.input(limit_pin_xy)
if value == gpio.low:
signal['hou_hw'] = true
print('', signal['qian_hw'])
print('chufa')
break
def mov_begin():
while true:
value = gpio.input(limit_pin_xy)
# value = input('input:')
mov_x(0.1, r_d)
if value == gpio.low:
mov_x(6, l_u)
print('11111_mov_begin()_11111')
break
while true:
value = gpio.input(limit_pin_xy)
# value = input('input:')
mov_y(0.1, l_u)
if value == gpio.low:
mov_y(16, r_d)
break
return true
def mov_y(st, pin_dir):
v = 1000
if pin_dir == 1:
gpio.output(dirpin_y, gpio.low)
if pin_dir == 0:
gpio.output(dirpin_y, gpio.high)
for i in range(int(st * 50)):
gpio.output(steppin_y, gpio.high)
delaymicroseconds(v)
gpio.output(steppin_y, gpio.low)
delaymicroseconds(v)
def mov_y_1(st, v, pin_dir):
if pin_dir == 1:
gpio.output(dirpin_y, gpio.low)
if pin_dir == 0:
gpio.output(dirpin_y, gpio.high)
for i in range(int(st * 50)):
gpio.output(steppin_y, gpio.high)
delaymicroseconds(v)
gpio.output(steppin_y, gpio.low)
delaymicroseconds(v)
# st为距离,单位为厘米;pin为步进电机引脚;v为运行速度
def mov_x(st, pin_dir):
if st < 20:
v = 1000
if pin_dir == 0:
gpio.output(dirpin_x, gpio.low)
if pin_dir == 1:
gpio.output(dirpin_x, gpio.high)
for i in range(int(st * 50)):
gpio.output(steppin_x, gpio.high)
delaymicroseconds(v)
gpio.output(steppin_x, gpio.low)
delaymicroseconds(v)
else:
v = 1500
v1 = 500
s = st / 7 * 50
if pin_dir == 0:
gpio.output(dirpin_x, gpio.low)
if pin_dir == 1:
gpio.output(dirpin_x, gpio.high)
for i in range(int(s)):
gpio.output(steppin_x, gpio.high)
delaymicroseconds(v)
gpio.output(steppin_x, gpio.low)
delaymicroseconds(v)
v = v - (v - v1) / s
s = st / 7 * 4 * 50
for i in range(int(s)):
gpio.output(steppin_x, gpio.high)
delaymicroseconds(v1)
gpio.output(steppin_x, gpio.low)
delaymicroseconds(v1)
s = st / 7 * 2 * 50
for i in range(int(s)):
gpio.output(steppin_x, gpio.high)
delaymicroseconds(v)
gpio.output(steppin_x, gpio.low)
delaymicroseconds(v)
v = v (v - v1) * 3 / s / 2
if __name__ == '__main__':
gpio.cleanup()
print('6666')
io_begin()
time.sleep(2)
for i in range(4):
gpio.output(dirpin_x, gpio.high)
for i in range(200):
gpio.output(steppin_x, gpio.high)
delaymicroseconds(1000);
gpio.output(steppin_x, gpio.low)
delaymicroseconds(1000);
print('end6666')
time.sleep(2)
print('77777')
mov_begin()
print('88888')
主函数代码,包含了基本的控制逻辑:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# -*-coding:gb2312-*
import threading
import cv2
import time
import os
import podai
import shibie
import global_val
import i2c
import io
# 摄像头编号
# 照片保存路径
save_path = 'cam'
# 照片尺寸
photo_size = (600, 400)
# 识别阈值
confidence_threshold = 0.5
# 摄像头是否打开
camera_open = false
# 摄像头开关
camera_state = true
# 步进电机运动方向
r_d = 0
l_u = 1
def setcamera(cap):
cap.set(6, cv2.videowriter.fourcc('m', 'j', 'p', 'g'))
cap.set(3, 480)
cap.set(4, 640)
def catchusbvideo(window_name, id):
cv2.namedwindow(window_name) # 写入打开时视频框的名称
# 捕捉摄像头
cap = cv2.videocapture(id) # camera_idx 的参数是0代表是打开笔记本的内置摄像头,也可以写上自己录制的视频路径
setcamera(cap)
cap.set(cv2.cap_prop_frame_width, 1280)
cap.set(cv2.cap_prop_frame_height, 720)
# cap = cv2.videocapture(0, cv2.cap_dshow)
# event = threading.event()
while cap.isopened(): # 判断摄像头是否打开,打开的话就是返回的是true
# 读取图像
ok, frame = cap.read() # 读取一帧图像,该方法返回两个参数,ok true 成功 false失败,frame一帧的图像,是个三维矩阵,当输入的是一个是视频文件,读完ok==flase
if not ok: # 如果读取帧数不是正确的则ok就是false则该语句就会执行
break
#将图像转为灰度图像
gray = cv2.cvtcolor(img, cv2.color_bgr2gray)
# 对灰度图像进行二值化处理,将颜色较深的区域设为白色,其余设为黑色
_, thresh = cv2.threshold(gray, 0, 255, cv2.thresh_binary_inv cv2.thresh_otsu)
# 找到轮廓
contours, _ = cv2.findcontours(thresh, cv2.retr_external, cv2.chain_approx_simple)
# 找到最大的轮廓
max_contour = max(contours, key=cv2.contourarea)
# 计算最大轮廓的外接矩形
x, y, w, h = cv2.boundingrect(max_contour)
area = cv2.contourarea(max_contour)
# 仅对面积较大的轮廓进行处理,过滤掉一些噪声
if area > 10000 and h < 720 and w < 1280:
# 在原图上绘制矩形框
cv2.rectangle(img, (x, y), (x w, y h), (0, 255, 0), 2)
# 计算最左边、最右边和最底边的点的坐标
leftmost = tuple(max_contour[max_contour[:, :, 0].argmin()][0])
rightmost = tuple(max_contour[max_contour[:, :, 0].argmax()][0])
bottommost = tuple(max_contour[max_contour[:, :, 1].argmax()][0])
global_val.leftmost = leftmost
global_val.rightmost = rightmost
global_val.bottommost = bottommost
# 在最左边、最右边和最底边的点的范围画一条水平线
cv2.line(img, (leftmost[0], leftmost[1]), (rightmost[0], rightmost[1]), (0, 0, 255), 2)
cv2.line(img, (bottommost[0], bottommost[1]), (leftmost[0], leftmost[1]), (0, 0, 255), 2)
cv2.line(img, (bottommost[0], bottommost[1]), (rightmost[0], rightmost[1]), (0, 0, 255), 2)
# 获取一帧识别
# threading.event()
# if event.is_set():
# shibie.capture_photo(cap)
# 显示图像
cv2.imshow(window_name, frame) # 显示视频到窗口
c = cv2.waitkey(10)
if c & 0xff == ord('q'): # 键盘按q退出视频
break
cap.release() # 释放摄像头
cv2.destroyallwindows() # 销毁所有窗口
def podai_doudong(a):
for i in range(a):
io.mov_y_1(6, 600, l_u)
io.mov_y_1(6, 600, r_d)
def print_cam(a):
if a == 'l':
print("leftmost point:", global_val.leftmost)
elif a == 'r':
print("rightmost point:", global_val.rightmost)
elif a == 'b':
print("bottommost point:", global_val.bottommost)
else:
print("1leftmost point:", global_val.leftmost)
print("1rightmost point:", global_val.rightmost)
print("1bottommost point:", global_val.bottommost)
if __name__ == '__main__':
thread_cv = threading.thread(target=catchusbvideo, kwargs={"window_name": 'cam', "id": global_val.camera_id})
thread_cv.start()
io.io_begin()
while true:
high_y = 0
delay_mark = 0
# 电机初始化
io.mov_begin()
io.chufa(global_val.hw_signal)
time.sleep(0.5)
if global_val.hw_signal['qian_hw'] and global_val.hw_signal['hou_hw']:
print("11111_zhun bei_11111")
# 舵机限位开,i2c.send(10)为关
i2c.send(1)
time.sleep(2)
io.mov_x(20, l_u)
# global_val.img_signal_in = true
time.sleep(0.5)
while true:
# 判断底部位置是否正确。屏幕高为720,如果底部y坐标大于700,说明位置不对
if global_val.bottommost[1] == 0 or global_val.bottommost[1] > 700:
print("22222_shangxia tiaozheng_111111")
print_cam('b')
if high_y != 123:
io.mov_y(1, l_u)
high_y = high_y 1
time.sleep(0.5)
if high_y > 10:
print_cam('b')
high_y = 123
print("22222_sx_tiaozheng_shibai_outtime_222222")
break
# 精确调整
if 500 < global_val.bottommost[1] < 600:
print_cam('b')
io.mov_y(0.5, r_d)
print("222222_sangxia_jingque_tiaozheng_333333")
# 正确位置
if 600 < global_val.bottommost[1] < 700:
print_cam('b')
print("2222222_shangxia_tiaozheng_ok_444444")
break
# 上下调整失败,重来
if high_y == 123:
print("333333_tiaozheng_not_ok_continue_11111")
continue
while true:
if global_val.rightmost[0] < 1280:
print("44444444_panduang_kuangdu_11111")
print_cam('l')
print_cam('r')
# 判断宽度
wight_1 = global_val.rightmost[0] - global_val.leftmost[0]
print('print(wight_1):', wight_1)
time.sleep(2)
wight_2 = global_val.rightmost[0] - global_val.leftmost[0]
print('print(wight_2):', wight_2)
print_cam('l')
print_cam('r')
wight = wight_2 - wight_1
print('print(wight)_1:', wight)
# 采集两次宽度,如果两次宽度都大于限定值,且两次的差小于另一限定值
if wight_1 > 200 and wight_2 > 200 and -100 < wight < 100:
wight = (wight_2 wight_1) / 2
print('print(wight)_2:', wight)
print("44444444_end")
break
else:
io.mov_x(0.5, l_u)
# 破袋环节
print("5555555_podai_11111")
# i2c.send(2)为执行破袋
i2c.send(2)
while true:
podai_stat = i2c.read()
if podai_stat == 20:
print("5555555_podai_end_22222")
podai_stat = 0
break
podai_doudong(3)
# 第二轮破袋,向右移动6厘米
io.mov_x(6, r_d)
i2c.send(2)
while true:
podai_stat = i2c.read()
if podai_stat == 20:
print("5555555_podai_end_333333")
podai_stat = 0
break
podai_doudong(3)
# 破袋判断
time.sleep(2)
podai_timeout = 0
while true:
# 获取破袋后的宽度
wight_end = global_val.rightmost[0] - global_val.leftmost[0]
print_cam('b')
print_cam('l')
print_cam('r')
# 判断条件
if wight / wight_end >= 1.8 or podai_timeout > 2:
# 分类
io.mov_x(36, l_u)
# i2c.send(3)执行脱袋
i2c.send(3)
podai_doudong(3)
# 挂钩修正
i2c.send(30)
# 限位复原
i2c.send(10)
print("5555555_podai_end_555555")
break
else:
print("5555555_podai_22222")
podai_timeout = podai_timeout 1
# i2c.send(2)为执行破袋
i2c.send(2)
while true:
podai_stat = i2c.read()
if podai_stat == 20:
print("5555555_podai_end_44444")
podai_stat = 0
break
podai_doudong(3)
continue
整体项目代码写得不太规范,逻辑可能也不太好
随着上海垃圾分类的快速推进,我们接触到的垃圾分类的信息越发多了起来,而作为外卖行业产生的生活垃圾巨大。我突然脑回路了一把:可否将外卖塑料袋按照分类垃圾袋标准制作,从而让外卖塑料袋变废为宝,通过分类垃圾袋形式得以循环利用?为了论证此事的可行性,我们需要逐一理清以下问题:
外卖究竟一年能产生多少垃圾?外卖垃圾有哪些组成?外卖塑料袋一年数量用掉多少?现有外卖塑料袋有什么材料构成?需要多长时间才能降解?日常垃圾袋都什么标准?分类垃圾袋有什么标准?能否将外卖塑料袋做成分类垃圾袋?
以下来逐一说明这些问题:
外卖究竟一年能产生多少垃圾?
据科学家估计,2017年中国的在线外卖业务产生了160万吨包装垃圾,是两年前的九倍。其中包括120万吨塑料盒、17.5万吨一次性筷子、16.4万吨塑料袋和4.4万吨塑料勺。这些加在一起,比整个费城市每年处理的各类住宅和商业垃圾还要多。2018年,这一总数更是增加到了约200万吨。
外卖垃圾有哪些组成?外卖塑料袋一年数量用掉多少?
首先,塑料或发泡餐盒、塑料袋、一次性筷子等,构成了外卖垃圾的主要部分。
其次,仅国内三大外卖平台一年至少消耗73亿个塑料袋。数据显示,限塑令实施以来至2016年,全国商超塑料袋使用量普遍减少2/3以上,累计减少塑料购物袋140万吨左右。但是在菜市场这样的小型商贸市场里,个体经营者免费提供塑料袋的问题仍普遍存在。经过十年的努力,“限塑令”虽然取得了一定成果,但受价格因素、新增需求等多方面原因的叠加,效果也逐渐消弱。目前,大家并没有明显感受到塑料垃圾废弃和污染的减少。
在各大超市,虽然使用塑料袋需要收取一定费用,但是选择付费的年轻人消费者仍不在少数。从2008年限塑令开始实行到2016年,全国主要商品零售场所使用的塑料购物袋,共节约了约700亿个,平均计算下来每年大概节约87.5亿个。但是如今,快递包装和外卖盒越来越多,成了新的问题。数据统计,2016年全国快递行业消耗塑料袋约147亿个,而国内三大外卖平台一年至少消耗73亿个塑料包装,加起来远超每年节约下来的塑料购物袋。
最后,天天点外卖,却从没想过外卖塑料袋的平均使用时间仅为25分钟 ,外卖塑料袋的平均使用时间出奇的短。
现有外卖塑料袋有什么材料构成?需要多长时间才能降解?
外卖垃圾的危害不可小觑,送餐使用的塑料袋、塑料餐具等都属于塑料垃圾,大多均是不可降解的普通塑料。这些塑料垃圾与生活垃圾混在一起,通常直接焚烧或填埋,会给自然环境造成很大的压力。究其原因,一方面是可重复利用和可降解材料推广普及不够。目前,很多外卖平台出于成本考虑,使用的材料多是一次性、不可回收的,源头上导致了污染的产生;另一方面,塑料回收渠道不畅。塑料回收价格低、再资源化成本高,无论是垃圾回收企业,还是城市的“拾荒大军”,均对回收塑料制品没有兴趣。此外,回收难还与我国回收体系不完善有关。
以塑料袋为例,一只不可降解的塑料袋埋在地下,要经过约200年才能腐烂,会严重污染土壤;如果采取焚烧处理方式,则会产生有害烟尘和有毒气体。
日常垃圾袋都什么标准?
垃圾袋一般是用回收聚乙烯料加工而成,垃圾袋的制作过程如下:
1、塑料颗粒的造粒过程:将回收的废旧塑料分类、清洗、裁剪成碎片,使用造粒机将碎片融化制成几毫米长的塑料颗粒。
2、吹膜过程:将塑料颗粒制成塑料薄膜的过程,设备室吹膜机(又称吹塑机)。吹塑机可分为加热融化部分、吹泡部分、复卷部分。将再生塑料颗粒原料倒入吹塑机中高温融化,然后经过流延辊、定型辊、电晕辊、冷却辊的作用下,就成了原始的长条塑料薄膜,经过火花处理后经收卷机卷成圆柱形状。
3、圆柱形状薄膜经凹印机、胶印机、滚筒印刷机等印刷设备印刷,最后收卷机将其重又卷成圆柱形状。丝网印刷和机械印刷不同,它属于手工印刷,印刷前要先将塑料薄膜分切成塑料袋大小的片状才能进行印刷。
4、烫制分切过程:将印刷好的塑料薄膜球放入制袋机上烫制(制作背心袋要将每个袋的两头封口),然后分切成固定尺寸的塑料袋。
5、背心袋裁切过程:将塑料袋上头放到裁袋机刀下的砧板上,鈅刀在裁袋机的高压作用下,把塑料袋一头的中间部分裁掉,就形成了使用时的手提把手了。
6、打包运输。
可降解垃圾袋与日常垃圾袋。
可降解的垃圾堆就是:这种垃圾袋是在聚乙烯中加入25%左右的生物材料,以实现垃圾袋迅速降解。所谓生物材料,主要包括玉米淀粉、甘油及其他生产助剂。这种混合型可降解垃圾袋装满垃圾掩埋后,只需1—2年,就能被大自然中的微生物“吃”掉,即完全可降解为碎片,降解时间是普通垃圾袋的1/100左右。
分类垃圾袋有什么标准?
垃圾分类主要分为四类分别是干垃圾、湿垃圾、可回收物垃圾、有害垃圾等四类。
1. 湿垃圾是指一些即易腐烂的垃圾,如食物剩菜剩饭、食材废料、过期食品、果皮、花卉绿植、中药残渣等可以回收产生肥料的垃圾。
2. 有害垃圾是指对人体健康或者对自然环境直接或存在潜在危害的生活废弃物,如废电池、废药品、废油漆等等。
3. 可回收物垃圾主要指适宜回收、可循环利用的生活废弃物,如塑料饮料瓶、纸张、废金属、纺织物、玻璃制品等等。
4. 干垃圾主要指除有害垃圾、湿垃圾、可回收物以外的其它生活废弃物,如灰尘砖瓦等等。
分类垃圾袋示例
接着就是不同分类的垃圾所专用的垃圾袋颜色分类的问题了,干垃圾专用黑色垃圾袋、湿垃圾专用咖啡色垃圾袋、可回收物垃圾专用蓝色垃圾袋、有害物垃圾专用红色垃圾袋。要记清楚不同颜色的垃圾袋所装放的垃圾哦,有相关的规定如果个人或企业对垃圾进行混合的装运将会进行不同程度的罚款的。
在实际应用中,我们注意到上海一个街道的案例,可以参考一下:
上海的新虹街道专门为辖区居民、白领定制了上海版的“四色垃圾分类袋”。
分类垃圾袋上面加上一些图片是不是好看些了
黑色的袋子装干垃圾,可以放一次性餐具、餐巾纸、污损塑料袋、污损纸张等;
棕色的袋子装湿垃圾,可以装蔬菜、瓜果、鱼、碎骨等;
而蓝色的袋子装可回收物,可装废玻璃制品、废金属、废纸板箱、废织物等;
红色的袋子适用于有害垃圾,有机溶剂类包装物、含汞废弃物等要放进这个袋子。
记者了解到,“四色垃圾分类袋”是新虹街道向电商平台“京东京造”专门定制的,分类袋完全按照《上海市生活垃圾管理条例》中垃圾分类的方式以及对应的垃圾桶颜色制作而成。
为垃圾分类街道进行了“五次革命”
当垃圾分类“号令”一出,街道发现愿意做、做得好的多是上了年纪的爷叔、阿姨,年轻人则因为平时上班忙,别说具体垃圾应该怎么分类,有的甚至连垃圾需要分类了也不知晓,于是指派街道团工委负责对年轻人进行动员、宣传工作。
为了做好宣传工作,提高垃圾分类知晓率。其实,前期街道团工委已进行过四次“革命”:一是定制了10万个可降解的外卖塑料袋,袋子上印有垃圾分类的宣传内容,送给商户,送外卖时顺便送到白领手上;二是用瓷杯去换商务楼里的纸杯,倡导环保;三是看到虹桥商务区每天大约有1万单外卖,就定制了一批不锈钢餐具,减少一次性餐具的使用;四是给白领们送印有垃圾分类相关宣传语的布制购物袋。
而此次定制上海版四色垃圾袋已经是第五次革命了。“基层宣传工作发放一些宣传品是比较通用的做法,而垃圾袋就是很好的载体。”范敏汉说。
定制过程有讲究,厚度、款式、包装“精致打磨”
别看是小小的四色垃圾袋,定制过程可是很有讲究。新虹街道在结合实际使用情况后对垃圾袋的设计提出了要求。
一是要结实,结实是最基本的要求,社区里最难处理的是湿垃圾,如果垃圾袋不够结实,湿垃圾里常见的骨头、鱼刺特别是小龙虾的壳等垃圾很容易戳破垃圾袋,滴漏污水,为市民生活带来不便,也将降低市民对湿垃圾进行分类处理的积极性;
二是在不增加成本的情况下,最好能够按照上海的垃圾色系标准来分色,那么丢的时候一目了然,也便于志愿者识别;
三是最好垃圾袋还能具有一定的宣传效果,那么在工作的前期,街道可以采购一些作为宣传品奖励给配合开展垃圾分类工作的市民,也可以有效提升垃圾分类的知晓率。
什么样的垃圾袋才能符合要求呢?一开始,京东京造对平台已有的明星产品“珠光垃圾袋”进行了色彩改造,一套四卷,完全按照上海市标准的垃圾分类要求着色,并在袋身上印制垃圾分属明细。
能否将外卖塑料袋做成分类垃圾袋?
我想结论当然是可以的,但需要社会努力来克服。
外卖塑料袋若要变成可利用的分类垃圾袋,就需要按照分类垃圾袋标准制作。外卖平台可通过宣传循环利用,让民众接受外卖垃圾袋可作为分类垃圾袋而带来的外包装效果问题,作为垃圾的生产方,民众应理解并支持外卖塑料袋变成分类垃圾袋这一循环利用的好处,而忽略塑料袋包装形象带来的问题。要将外卖塑料袋打造成环保型的分类垃圾袋,最好是可降解的分类垃圾袋,防止垃圾袋用完后还是成为最终不可降解垃圾。但可降解塑料相比不可降解塑料成本贵得多,如何激励外卖平台生产可降解分类垃圾袋作为外卖塑料袋,需要重点考虑。
快了!
新版《北京市生活垃圾管理条例》将于5月1日实施。
面临北京垃圾分类“五一大考”在即,北京多区已下发生活垃圾分类实施细则,并提前部署。
1
东城区
垃圾分类坚持“干湿分开、资源回收”
▽
居民怎样扔垃圾才合格?
▽
2
西城区
建立“不分类、不收运”的倒逼机制
▽
3
海淀区
推出全市首堂垃圾分类网课
并且日前,海淀区城管委联手区教委推出的“中小学生垃圾分类线上教育系列课程”已陆续登录“海淀区中小学资源平台”,中小学生可在家学习垃圾分类课程。
这是北京市上线的首堂垃圾分类网课。
4
朝阳区
区级党政机关、企事业单位4月15日前强制分类
朝阳区制定的《朝阳区生活垃圾分类工作行动方案》:朝阳区区级党政机关、企事业单位要在4月15日前率先实现生活垃圾强制分类。
5
大兴区
今年底80%以上的原生垃圾实现资源化处理:
大兴区发布的生活垃圾分类工作行动方案明确,今年4月底前,全区党政机关,学校、医院等事业单位,宾馆、饭店等相关企业全面实施垃圾分类。
6
延庆区
采用“5 1”模式推进垃圾分类
《延庆区生活垃圾分类工作实施方案(试行)》提出,以“5 1”模式对生活垃圾进行分类。其中,“5”为厨余垃圾、可回收物、有害垃圾、其他垃圾、大件垃圾。
“ 1”是指党政机关、社会单位、居民小区需在原有基础上增加装修垃圾分类,村庄则需加入灰土垃圾分类。
5月1日起,北京商超、集贸市场不得免费提供塑料袋
北京市市场监管局今天表示,为配合5月1日起施行的《北京市生活垃圾管理条例》,按照相关法规要求,北京市市场监管局将依法开展对北京市塑料袋生产企业以及商场、超市、市场等商品零售场所监督检查,严格塑料袋监督管理。
塑料袋是日常生活中的易耗品,在给人们生活带来便利的同时,塑料袋的大量使用和随意丢弃也造成了环境污染。
市市场监管局此次要求,禁止在本市生产、销售超薄塑料袋。禁止生产、销售和在经营中使用厚度在0.025毫米以下(含0.025毫米)的塑料袋。商业企业和生活消费品、生产资料市场中的经营者在经营中使用的塑料袋必须印有本企业或者所在市场的名称。
市场开办单位应当加强对市场内的经营者销售和使用塑料袋情况的监督检查,并指定柜台或者摊位集中向市场内的其他经营者出售合格的塑料袋。非指定的柜台或者摊位不得擅自向市场内的其他经营者出售塑料袋。
商品零售场所应向依法设立的塑料购物袋生产厂家、批发商或进口商采购塑料购物袋,并索取相关证照,建立塑料购物袋购销台账,以备查验。
超市、商场、集贸市场等商品零售场所不得免费提供塑料袋,应当依法明码标价。商品零售场所应当在销售凭证上单独列示消费者购买塑料购物袋的数量、单价和款项。以出租摊位形式经营的集贸市场对消费者开具销售凭证,确有困难的除外。
商品零售场所可自主制定塑料购物袋价格,但有四种情况不得出现:
低于经营成本销售塑料购物袋;
不标明价格或不按规定的内容方式标明价格销售塑料购物袋;
采取打折或其他方式不按标示的价格向消费者销售塑料购物袋;
向消费者无偿或变相无偿提供塑料购物袋。
各位?北京垃圾分类“五一大考”在即!
除了相关部门紧锣密鼓,我们也该有意识地配合和学习垃圾分类的知识和意识!
参考来源:
北京日报客户端/新华社/新京报网/微博/最爱大北京/综合整理
▲
-- the end?--
如果喜欢这篇,
欢迎点击底部「在看」或分享朋友圈,
才能让更多人看到哦!
点个“在看”,给小编加个鸡腿
还没有评论,来说两句吧...