Select mesh perimeter
BMEdge.is_boundary



Can select boundary edges using BMEdge.is_boundary Below is a test script, run in edit mode

import bpy
import bmesh
context = bpy.context

obj = context.edit_object
me = obj.data
bm = bmesh.from_edit_mesh(me)
bm.select_mode |= {'EDGE'}
for e in bm.edges:
    e.select = e.is_boundary
bm.select_flush_mode()   
me.update()


Not sure here if you are after the "silhouette" verts. As in your question here